C#如何对DataTable按单列GroupBy,保留全部原列并新增计数列
问题原因
你现有代码仅返回两列是因为Select方法中只定义了AccountNumber1和NumCalls两个字段;另外原代码里x.Key.AccountNumber1的写法存在错误:你GroupBy的Key直接是int类型的AccountNumber1值,无需再取属性。
解决方案
假设同一个AccountNumber1对应的其他列(AccountNumber2、AccountListDate、AccountDisposition)取值一致,直接取分组内第一条记录的对应字段即可,修改后代码如下:
table.AsEnumerable() .GroupBy(row => row.Field<int>("AccountNumber1")) .Select(g => { // 取分组内第一条记录作为其他字段的取值来源 var firstRowInGroup = g.First(); return new { AccountNumber1 = g.Key, // 注意Field的泛型类型要和你实际表的列类型匹配,以下是示例类型 AccountNumber2 = firstRowInGroup.Field<string>("AccountNumber2"), AccountListDate = firstRowInGroup.Field<DateTime>("AccountListDate"), AccountDisposition = firstRowInGroup.Field<string>("AccountDisposition"), NumCalls = g.Count() }; }) .CopyToDataTable();
注意事项
如果同一个AccountNumber1分组下的其他字段存在不同取值,你需要自行调整取值逻辑,比如要取最新的外呼记录对应的字段,可以将g.First()替换为g.OrderByDescending(row => row.Field<DateTime>("AccountListDate")).First()。
内容的提问来源于stack exchange,提问作者JDSchenck
相关产品推荐
相关产品推荐

