2012-05-15 13 views
5

私はこのコードLINQで特定の列を選択する方法は?

ds.Table[0].AsEnumerable().Where<DataRow>(r=>r.Field<int>("productID")==23).CopyToDataTable(); 

を使用しています。しかし、それは私にすべての列を与えていると私は唯一PRODUCTNAME、DESCRIPTION、PRICE

を必要とLINQ を使用して、私のDataTableから特定の列を選択する必要があります

このクエリはどのように書くことができますか?

答えて

4

@lazyberezovsky上のビットを展開するには、あなたが欲しいすべてのフィールドを取得するには、匿名型の投影を使用することができます。

ds.Table[0].AsEnumerable() 
    .Where<DataRow>(r => r.Field<int>("productID") == 23) 
    .Select(r => new { ProductName = r.Field<string>("productName"), 
         Description = r.Field<string>("description"), 
         Price = r.Field<decimal>("price") }); 

私が説明、どのような名前を知っているし、あなたの製品名を入力しないでください、価格フィールドがあるので、それらを代用する必要があります。

+0

ありがとうございます。あなたは私の質問をclaerlyし、あなたの答えは私の質問の答えです。私はすでに1つのフィールドを表示する方法を知っていますが、3の表示方法はわかりません – user1390378

6

使用を選択する方法:

ds.Table[0].AsEnumerable() 
      .Where<DataRow>(r=>r.Field<int>("productID")==23) 
      .Select(r => r.Field<int>("productID")); 

がUPDATE:あなたは、いくつかの列を選択する必要がある場合は、あなたが匿名型を返すことができます:あなたは新しいテーブルにそのデータをコピーする必要がある場合

var query = from row in dt.ds.Table[0].AsEnumerable() 
      where row.Field<int>("productID")==23 
      select new { 
          ProductID = x.Field<string>("productID"), 
          Foo = x.Field<string>("foo") 
         }; 

は、あなたは問題に直面します(CopyToDataTableはDataRowオブジェクトの収集を必要とします)。この問題を解決するには、How to: Implement CopyToDataTable Where the Generic Type T Is Not a DataRowを参照してください。

+0

これで私は1つの列だけを選ぶことができますが、私は3を選ぶ必要があります – user1390378

関連する問題