微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 ) ) );
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐