c# – Linq GroupBy – 如何在运行时指定分组键?

是否有一种很好的方法可以在运行时确定分组键的 Linq GroupBy?例如我希望从用户选择的字段列表构建分组键 – 你能这样做吗?我知道如果我将所有内容转换为字符串表,我可以轻松地完成它,但我想知道是否有一种优雅或聪明的方法来实现这一点.

class Item
{
    public int A,B;
    public DateTime D;
    public double X,Y,Z;
}

我有一个List< Item>叫数据.我想做一些事情,比如检索按A分组的X的总和,或者按A和B分组的X,Y和Z的总和.但是应该能够在运行时以某种方式指定分组中的哪些字段.

解决方法

获取 Dynamic LINQ代码并使用它的扩展,允许您使用字符串指定keySelector.

var query = db.Foo.GroupBy( "{0}","GroupedProperty",groupKey );

如果要返回按键分组的整个对象,您可能还需要考虑添加自己的扩展.

public static IQueryable GroupByComplete( this IQueryable source,string keySelector,params object[] values )
{
    if (source == null) throw new ArgumentNullException( "source" );
    if (keySelector == null) throw new ArgumentNullException( "keySelector" );
    LambdaExpression keyLambda = DynamicExpression.ParseLambda( source.ElementType,null,keySelector,values );
    return source.Provider.createquery(
        Expression.Call(
            typeof( Queryable ),"GroupBy",new Type[] { source.ElementType,keyLambda.Body.Type },source.Expression,Expression.Quote( keyLambda ) ) );
}

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...