【问题标题】:Lambdas does not recognize fields of DataTablesLambdas 无法识别 DataTables 的字段
【发布时间】:2012-10-17 14:57:15
【问题描述】:

我已经在其他解决方案中多次这样做了。但在其中一个中,它不起作用。不知道为什么。

我想在一些数据表中使用Where()。所以,例如,我会这样做

int someId;
DatasetName.DatatableName.AsEnumerable().Where(x => x.id == someId);

但在这个项目中,它无法识别 lambda x => x.id == someId

这是为什么呢?我不能使用它们。智能感知,在Where 中的( 之后识别需要接收Func,而当我接收x => x. 时,它无法识别DataTable 的字段。为什么我不能x.id ?我知道我可以使用Field<>()(我认为这是名称),但我已经多次直接使用这些表达式,我认为它们更具可读性。而在其他解决方案中确实可以做到这一点。

我已经添加了

的引用
using System.Linq;    
using System.Data.Linq;
using System.Linq.Expressions;

它不编译,也不识别数据表的任何字段。 该项目设置为.Net Framework 3.5

任何帮助将不胜感激

【问题讨论】:

    标签: c# .net linq lambda datatable


    【解决方案1】:

    我假设您正在使用强类型数据集。

    AsEnumerable() 可能出于某种原因返回IEnumerable<Object>。尝试添加演员表:

    DatasetName.DatatableName.AsEnumerable().Cast<MyRowType>().Where(x => x.id == someId);
    

    您还应该确保 DataTable 正确地继承自 System.Data.TypedTableBase&lt;MyRowType&gt;

    【讨论】:

    • 现在工作。但是为什么不进行自动转换呢?在其他解决方案中,无需 Cast
    • MyRowType 的类型来自哪里?
    • 在一个数据集中,在另一个项目中,我用 using 引用了
    • 在其他解决方案中,也将数据集放在一个项目中,并使用它们进行引用,然后工作
    • @ElVieejo 老实说,不太清楚为什么。但是,如果数据表继承自 System.Data.TypedTableBase&lt;MyRowType&gt;,则实际上首先不需要 AsEnumerable() 调用,因为 System.Data.TypedTableBase&lt;T&gt; 继承自 IEnumerable&lt;T&gt;
    【解决方案2】:
    dataSet.Tables[0].AsEnumerable().Where(
    r => r["Col1"] == "MyValue")
    

    您可以使用 LINQ to DataSet 来执行此操作:

    【讨论】:

    猜你喜欢
    • 2014-06-21
    • 2016-04-13
    • 2016-01-26
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2021-02-26
    • 2021-03-16
    相关资源
    最近更新 更多