2012-03-22 9 views
0
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()にもう1つのグループを追加したい場合は、上記のようにitem =>をもう一度入力する必要があります。 First()のように「再利用」できないのはなぜですか? また、2番目のグループを使用している場合、各グループの要素には、これらの2つのフィールドのみが表示されます。 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

Thanks Sorax、works! –

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

申し訳ありません。メソッドの生成物である匿名型のプロパティの名前を指定する必要があります。この場合、メソッドは 'Field ()'です。それは私の答えの見落としだった。私はそれを更新します。 – Sorax