7

linqを使用してDataTableから特定の列を選択する必要がありますこのコードを使用しています

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

しかし、それは私にすべての列を与えており、私はPRODUCTNAME、DESCRIPTION、PRICEだけが必要です

このクエリを作成するにはどうすればよいですか?

4

2 に答える 2

7

@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") });

商品名、説明、価格の各フィールドの名前と入力がわからないため、これらを置き換える必要があります。

于 2012-05-15T12:48:11.993 に答える
7

Selectメソッドを使用します。

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

更新:複数の列を選択する必要がある場合は、匿名タイプを返すことができます。

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オブジェクトのコレクションが必要です)。この問題を解決するには、「方法:ジェネリック型TがDataRowではない場合にCopyToDataTableを実装する」を参照してください。

于 2012-05-15T12:41:08.503 に答える