如何在LINQ中选择特定列?

use*_*378 6 c# linq

我必须使用linq从我的DataTable中选择特定列我正在使用此代码

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

但它给了我所有专栏,我只需要PRODUCTNAME,DESCRIPTION,PRICE

我怎么写这个查询?

Ser*_*kiy 6

使用选择方法:

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

更新:如果您需要选择多个列,可以返回匿名类型:

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")
                        };
Run Code Online (Sandbox Code Playgroud)

如果需要将该数据复制到新表,则会遇到问题(CopyToDataTable需要收集DataRow对象).请参见如何:实现CopyToDataTable,其中通用类型T不是DataRow来解决此问题.


AJ.*_*AJ. 5

要扩展@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") });
Run Code Online (Sandbox Code Playgroud)

我不知道您的产品名称,描述和价格字段是什么名称和类型,因此您必须替换这些名称。