2012-10-17 83 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(),但我希望避免對列的名稱進行編碼 –

相關問題