2012-04-03 8 views
7

私は、クエリを持ってLINQはっきりと選択し、新しいクエリ

var QP = (from a in QProductAllInfo select new { a.Id, a.Title, a.FullTitle}).Distinct(); 

結果は次のとおりです。

  • 1イワノフイワン
  • 1イワノフイワン
  • 2ペトロフペトル
  • 3 Sidorovイワン
  • 3 Sidorovイワン

と私は結果が必要です。

  • 1イワノフイワン
  • 2ペトロフペトル
  • 3 Sidorovイワン
+0

'Distinct'を' from a in QProductAllInfo.Distinct() 'のようにデータソースに適用しようとしましたか? – madd0

+0

はい。それは助けられる仕事 – alexandrovdi

答えて

6

異なるIdが常に異なるとみなされると仮定すると、これを試すことができます。

私はおそらく2つのquerysでそれを記述します。そうすれば、デバッグが容易になり、読みやすくなります。 MoreLinqを使用できます。

DistinctBy

Download

var temp = from a in QProductAllInfo select new { a.Id, a.Title, a.FullTitle}.ToList(); 

var result = temp.DistinctBy(i => i.Id); 

また、あなたがQProductAllInfoで重複している場合は、これであなたのコードを交換して、あなたの問題を解決する必要があります

Var result = temp.GroupBy(x => x.Id).Select(y => y.First()); 
+0

をDosn'tしかし、私はこのdatagridview.datasource =結果のようなコードを実行することはできません。 – alexandrovdi

+1

データソースにIenumerableを割り当てることはできません。データソースにIenumerableを割り当てる方法については、Googleにお問い合わせください。私はASP.netをよくしていません – Sandeep

+0

DistinctBy Workありがとうございます! – alexandrovdi

0

を.Distinct使用がかどうかを判断することをあなたがたIEqualityComparerを実装することができアイテムはすでにリストに存在します。代わりに同じオブジェクトへの参照で属性を比較することができます。

しかし、それは匿名型で動作するかどうかはわかりません。

2

を使用することができます。

var QP = from a in QProductAllInfo.Distinct() 
     select new { a.Id, a.Title, a.FullTitle }; 

これが動作しない場合は、あなたの代わりにこのような匿名型のタプルを使用することができますが:匿名型は常にそのdo​​nc型を参照しているので、匿名型にDISTINCT演算子を適用する

var QP = from a in QProductAllInfo 
     select Tuple.Create(a.Id, a.Title, a.FullTitle); 

は無用ですIEquatableインターフェイスを実装します。

+0

実際に私は8つ以上の項目を選択する必要があります。そして最後に私は次に行う必要があります:datagridview.datasource = QP; – alexandrovdi

関連する問題