构建具有多个参数的GroupBy Lambda表达式

时间:2018-04-06 09:52:25

标签: c# lambda linq-expressions

我有以下枚举扩展方法:

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

这不起作用,因为我在查询中传递非基本类型。我怎样才能以正确的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

Mitsu Furuta有一个很好的解决方案......

https://blogs.msdn.microsoft.com/mitsu/2007/12/21/playing-with-linq-grouping-groupbymany/

虽然不会产生扁平的分组......

如果你想展平得到的树,那么你想看的组就是树的叶子......用收益率回报来尖叫一点递归