【问题标题】:Dynamic GroupBy LINQ [duplicate]动态 GroupBy LINQ [重复]
【发布时间】:2019-03-19 03:02:57
【问题描述】:

假设我有一堂课

public class Item
{ 
    public int Field1{get;set;}
    ……
    public int FieldN{get;set;}
}

我想像这样使用 group by;

Collection.GroupBy(selector“Field1,…,FieldK”)
          .Select(x=> new Item
              {
                  Field1 = x.Key.Field1,
                   …
                  FieldK= x.Key.FieldK,
                  FiledK+1= x.Sum(x.FieldK+1),
                  ….
                  FiledN= x.Sum(x.FieldN)
              };

如何使用表达式树来做到这一点

【问题讨论】:

  • 你确定你想要的是表达式树吗?也许您正在寻找您使用 Method Syntax 编写的 linq 语句的 Query Syntax。是这样吗?
  • N 有多大?
  • 我认为他想动态生成用于分组的字段,这需要表达式树以编程方式创建在第一个参数中传递给GroupBy 的表达式。 OP的一些明确性将有助于确定。

标签: c# linq group-by expression-trees


【解决方案1】:

欢迎来到stackoverflow ! 你想要的可以这样实现:

var a = from item in collection
        group item by new {item.Field1, ... , item.Fieldk} into newGroup
        select new {
            Field1 = newGroup.Key.Field1
            Field2 = newGroup.Key.Field1
            ...
            FieldK+1 = newGroup.Sum(x => x.FieldK+1),
            ...
            FieldN = newGroiup.Sum(x => x.FieldN)
         }

请务必阅读documentation。那里有很好的例子。

【讨论】:

  • FieldK+1 = newGroup.Sum(x => x.FieldK+1), 将不起作用。
  • @DStanley 这只是一个伪代码,应该用真实代码替换。这是表示第 (K+1) 个字段的符号。
  • 我明白 - 当 K 未知时,您打算如何实施?
  • @DStanley 啊哈,我明白了。如果 K 没有在编译时指定,你是对的。但是操作员没有提到他正在尝试动态生成查询。如果 OP 为我们提供更多说明,我将删除此答案。
  • K+1 我的意思是下一个字段。我的代码只是一个虚构的。无论如何,我使用表达式树解决了我的分组问题,现在我正在研究 GroupJoin。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 2020-01-09
相关资源
最近更新 更多