2012-03-22 136 views
0
如果我想在的GroupBy增加一个分组()和上面一样,我需要的项目=>再次
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(); 

。 为什么不能像First()中的“重用”项目? 另外,看起来,当我使用第二个分组时,每个组的元素只会显示这两个字段,而只使用唯一一个分组时,我可以在元素中看到表中的所有字段。 只是想更好地理解GroupBy()。 谢谢!的GroupBy澄清

回答

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,查询将返回所有字段。

+0

谢谢Sorax,作品! – 2012-03-23 15:32:54

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(); 

需要添加明确的名称,以避免“匿名类型的投影应样品名称或成员访问表达”。你可以不用明确的名字吗?

+0

对不起。您确实需要为属于方法产品的匿名类型的属性提供名称。在这种情况下,该方法是“字段()'。这是我的回答中的一个疏忽。我会更新它。 – Sorax 2012-03-25 17:46:50