加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 00:13:51 所属栏目:百科 来源:网络整理
导读:是否有一种很好的方法可以在运行时确定分组键的 Linq GroupBy?例如我希望从用户选择的字段列表构建分组键 – 你能这样做吗?我知道如果我将所有内容转换为字符串表,我可以轻松地完成它,但我想知道是否有一种优雅或聪明的方法来实现这一点. class Item{ publ
是否有一种很好的方法可以在运行时确定分组键的 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 ) ) );
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读