【问题标题】:How to select specific column in LINQ?如何在 LINQ 中选择特定列?
【发布时间】:2012-05-22 23:19:23
【问题描述】:

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

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

~

但它给了我所有的列,我只需要 PRODUCTNAME , DESCRIPTION , PRICE

我该如何编写这个查询?

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    要扩展一点@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") });
    

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

    【讨论】:

    • 谢谢它的工作。你清楚地得到了我的问题,你的答案就是我的问题的答案。我已经知道如何显示一个字段,但不知道如何显示 3
    【解决方案2】:

    使用 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 对象的集合)。请参阅How to: Implement CopyToDataTable Where the Generic Type T Is Not a DataRow 解决此问题。

    【讨论】:

    • 这样我只能选择一列,但我必须选择 3
    猜你喜欢
    • 1970-01-01
    • 2021-05-01
    • 2011-06-19
    • 1970-01-01
    • 2023-02-26
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多