2013-01-01 43 views
0

我嘗試做這樣的事情數據表中查找項目

var names_en = dtTmp.AsEnumerable(); 
var names = names_en.Where(a => a["ID"] == "1"); 
string name = names["Name"].ToString(); 

我的目標是要找到排在那裏ID equalls 1並保持Name作爲字符串

我知道我有ID collumn我知道,我有一排ID==1我在調試器中看到它。 但names可以讓枚舉不會產生結果。

還有沒有更好的方法來做到這一點?

+0

試試:'變種名稱= names_en.Where(A =>一[ 「ID」]等於( 「1」) );' – ronen

+0

@ronen - 我認爲它很好考慮ID爲數字而不是字符串... –

回答

1

如果您使用強類型的DataRowExtension.Field方法,它會更好。還要確保你的ID是字符串類型,否則你會得到一個異常。您可以相應地指定類型。

string name = dtTmp.AsEnumerable() 
       .FirstOrDefault(r => r.Field<string>("ID") == "1") 
       .Field<string>("Name"); 
+0

真棒!這工作。爲什麼我之前的方法失敗了? – Nahum

+1

@NahumLitvin,我只能猜測,但我相信你不能編譯你現有的代碼。 'name [「Name」]'不允許在集合上。你可以在早期的行上嘗試'name_en.Where(a => a [「ID」] ==「1」)。First();'然後它應該工作,或者另一個原因可能是你的ID是鍵入'int',並且您在當前表單中的比較不會返回任何結果,因爲您正在將它與字符串進行比較 – Habib

0
var names = names_en.Where(a => a["ID"] == "1"); 

返回結果的列表,你必須得到的第一條記錄