2012-10-17 54 views
0

我在其他解决方案中多次执行此操作。但在其中之一,它不起作用。不知道为什么。Lambdas无法识别DataTable的字段

我想在某些数据表中使用Where()。所以,我做的,例如

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

但在这个项目中,它不承认拉姆达x => x.id == someId

这是为什么?我无法使用它们。 intelissense,(Where认识到,需要收到Func,当我做x => x.它不能识别数据表的字段。为什么我不能做x.id?我知道我可以使用Field<>()(我认为这是个名字),但我直接使用了这些表达式很多次,我认为它们更具可读性。而在其他解决方案确实可行。

我加入的

using System.Linq;  
using System.Data.Linq; 
using System.Linq.Expressions; 

它不编译引用,不承认DataTable的任何领域。 该项目设置为.Net Framework 3.5

任何帮助将不胜感激

回答

1

我假设你是一个强类型数据集的工作。

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

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

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

+0

现在的工作。但为什么不做自动演员?在没有Cast的其他解决方案中工作 –

+0

“MyRowType”类型来自哪里? –

+0

在一个数据集中,在另一个项目中,我引用了一个正在使用的 –

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

您可以使用LINQ到数据集要做到这一点:

+0

http://stackoverflow.com/questions/3459595/how-do-i-use-lambda-expressions-to-filter-datarows –

+1

我知道这一点,因为我知道Field(),但我希望避免对列的名称进行编码 –

相关问题