Lambdas无法识别DataTables的字段

时间:2012-10-17 14:57:15

标签: c# .net linq lambda datatable

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

我想在某些dataTable中使用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;

它无法编译,也无法识别Datatable的任何字段。 该项目设置为.Net Framework 3.5

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

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

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

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

您还应该确保DataTable正确地继承自System.Data.TypedTableBase<MyRowType>

答案 1 :(得分:0)

dataSet.Tables[0].AsEnumerable().Where(
r => r["Col1"] == "MyValue")

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