GroupBy澄清

时间:2012-03-22 20:04:14

标签: linq-to-objects

    var listOfDuplicates = gridDatatable.AsEnumerable().
        GroupBy(item => item.Field<int>(Fields.GLAccountKey.Name),item => item.Field<string>(Fields.GLAccountNumber.Name))
            .Where(grouping => grouping.Count() > 1).ToList();

如果我想在GroupBy中添加一个分组()如上所述我需要item =&gt;再次。 为什么不能像First()中那样“重用”项目? 此外,似乎当我使用第二个分组时,每个组的元素将仅显示这两个字段,与使用唯一一个分组相比,当我可以在元素中看到表中的所有字段时。 只是想更好地了解GroupBy()。 谢谢!

2 个答案:

答案 0 :(得分:0)

我认为这就是你想要的:

var listOfDuplicates = gridDatatable.AsEnumerable()
    .GroupBy(a => new{
                      KeyName = a.Field<int>(Fields.GLAccountKey.Name)
                      , NumberName = a.Field<string>(Fields.GLAccountNumber.Name)
                     }
           )
    .Where(grouping => grouping.Count() > 1)
    .Select(grouping => grouping.Select(a => a))
    .ToList();

您可以使用anonymous type对所需数量的字段进行分组。在组上调用Select可以访问其项目及其所有字段。上面,只需返回a,查询将返回所有字段。

答案 1 :(得分:0)

var myListOfDuplicates = gridDatatable.AsEnumerable()
.GroupBy(item => new{Field = item.Field<int>(Fields.GLAccountKey.Name), S = item.Field<string>(Fields.GLAccountNumber.Name)})
.Where(grouping => grouping.Count() > 1)
.Select(grouping => grouping.Select(a => a))
.ToList();

需要添加显式名称以避免“匿名类型投影应该是样本名称或成员访问表达式”。你能没有明确的名字吗?