使用.NET 3.5时,我需要按多个列对
通常情况下,
DataTable
进行分组,其中列名包含在IEnumerable
中。// column source
IEnumerable<string> columns;
DataTable table;
IEnumerable<IGrouping<object, DataRow>> groupings = table
.AsEnumerable()
.GroupBy(row => ???);
通常情况下,
???
会是一个匿名类型,正如这里所描述的一样,但我需要使用columns
作为列来源。这是否可行?
Func<DataRow, IEnumerable<string>, string> f = (row, cols) => String.Join("|", cols.Select(col => (string)row[col]).ToArray());
- 但我想知道你能否解释一下这行代码实际上是如何工作的?.GroupBy(row => f(row, columns))
- 这个函数返回一个字符串,但如果你用一个字符串替换它,它就不能工作了!分组如何知道在构造函数中生成字符串后查看列值?如果您能指出任何解释这个问题的资源,我会很高兴。 - Joanna Derks(row => f(row, columns))
,最终得到像row => 1|10
或row => 2|987
这样的值,并将它们作为分组的键,因此如果其中任何一个重复出现,则会与前一个出现一起分组。好的,这很有道理。谢谢! - Joanna Derks