【发布时间】:2018-04-06 09:52:24
【问题描述】:
我有以下枚举扩展方法:
public static Expression<Func<Table, object>> GetGroupByClause(this OntDubbelingsEigenschappen o)
{
switch (o)
{
case OntDubbelingsEigenschappen.Voornaam:
return w => w.TableField1;
case OntDubbelingsEigenschappen.Achternaam:
return w => w.TableField2;
case OntDubbelingsEigenschappen.Emailadres:
return w => w.TableField3;
case OntDubbelingsEigenschappen.GeboorteDatum:
return w => w.TableField4;
default:
return null;
}
}
现在我想使用这个扩展来创建以下查询:
List<Expression<Func<Table, object>>> delList = new List<Expression<Func<Table, object>>>();
ontdubbelEigenschapIds.ForEach(f => delList.Add(f.GetGroupByClause()));
var users = Db.Table.GroupBy(x => new { delList })
.SelectMany(s => s).ToList().Select(s =>
new Model(s, isOverTakeActive)).ToList();
这不起作用,因为我在查询中传递了一个非原始类型。我怎样才能以正确的方式做到这一点?
【问题讨论】:
-
GroupBy(Queryable和Enumerable版本)有一个TKey通用参数。您似乎想在运行时决定此通用参数的类型,但这是不可能的(除非您生成代码)。 -
不是一个完整的答案,但我对多个
OrderBys 做了类似的事情。基本上,您需要的是表达式和反射的组合,以根据字段/属性获得适当的重载。也许这有帮助:OrderBy based on list of fields and Asc / Desc rules -
如果这是用于为 EF 生成动态分组查询...看看动态 linq ...github.com/StefH/System.Linq.Dynamic.Core
标签: c# lambda linq-expressions