【发布时间】:2016-12-11 00:51:55
【问题描述】:
有几个类似的发声帖子,但没有一个完全符合我的要求。
好的,想象一下我有以下数据结构(对于这个 LinqPad 示例进行了简化)
public class Row
{
public List<string> Columns { get; set; }
}
public List<Row> Data
=> new List<Row>
{
new Row { Columns = new List<string>{ "A","C","Field3"}},
new Row { Columns = new List<string>{ "A","D","Field3"}},
new Row { Columns = new List<string>{ "A","C","Field3"}},
new Row { Columns = new List<string>{ "B","D","Field3"}},
new Row { Columns = new List<string>{ "B","C","Field3"}},
new Row { Columns = new List<string>{ "B","D","Field3"}},
};
对于属性“数据”,用户将告诉我 GroupBy 的列序号;他们可能会说“不要按任何东西分组”,或者他们可能会说“按列[1]分组”或“按列[0] 和按列[1]分组”。
如果我想按单列分组,我可以使用:
var groups = Data.GroupBy(d => d.Columns[i]);
如果我想按 2 列分组,我可以使用:
var groups = Data.GroupBy(d => new { A = d.Columns[i1], B = d.Columns[i2] });
但是,列数是可变的(零 -> 很多);数据可能包含数百列,用户可能希望按数十列分组。
所以问题是,如何在运行时(动态)创建这个 GroupBy?
谢谢
格里夫
【问题讨论】:
-
您可以通过某种方式构建 Lambda 表达式 very much like this answer to a very similar question about dynamic OrderBy。