是否有一种很好的方法可以在运行时确定分组键的
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 ) ) ); }