2012-01-13 85 views
1

linqとC#を使用してデータテーブルから別のレコードを選択する必要があり、正しい構文が得られないようです。私は、データテーブル内のすべての行を返す次のコードを持って、私はどのようにDISTINCT行を返すのですか?LinqとC#を使用してDataTableからDistinctを選択

var q = (from dr in dt.AsEnumerable() select dr).Distinct(DataRowComparer.Default); 

をしかし、実際に、from x in ... select xは冗長であるので、我々は持つことができます:

DataTable dt = ds.Tables[0]; 
var q = from dr in dt.AsEnumerable() select dr; 

答えて

1
(from dr in dt.AsEnumerable() select dr).Distinct(); 
+0

見つけることができますか? エラー 'System.Data.EnumerableRowCollection 'に 'Distinct'の定義がなく、 'System'型の最初の引数を受け入れる拡張メソッドがありません。 Data.EnumerableRowCollection 'が見つかりました(usingディレクティブまたはアセンブリ参照がありません) –

+0

上記のvc 74の答えは正しいです。 – Matt

2

我々は持っている可能性があり

var q = dt.AsEnumerable().Distinct(DataRowComparer.Default); 

をしかし、すべてAsEnumerable()は、ほとんどの時間を行います何もない(それがすでにそのようなものである場合)か、または遅くなる可能性があります(別個のものが処理される可能性がある場合b Etterの他の場所で)、それを行うには、通常、より良いですので:

var q = dt.Distinct(DataRowComparer.Default); 

前者が後者を打つ場合がありますが。

+0

これはフィールド値に基づかず、参照によって行を比較するつもりです –

+0

@ vc74そうです、私はオーバーライドについて言及しましたが、これは使用する必要があるケースであることに気づいていません。 –

+0

心配しないで、btw、dt.ROWS.Distinct(DataRowComparer.Default)を意味しましたか? –

7

あなたがデータセットにLINQを使用してデータ行を比較する上DataRowComparer

IEnumerable<DataRow> distinctRows = 
    dt.AsEnumerable().Distinct(DataRowComparer.Default); 

詳細情報を使用する必要があります。これは、私が何を参照をしないのです、あまりにも私には意味をなさhere

関連する問題