2013-04-02 38 views
1

我想要queryDataTable獲得特定值。從datatable中獲取具體值where where子句

可以說我有一個DataTable其中包含2列:

  • ID
  • ITEM_NAME

現在我想做的是像我將與MySQL做到這一點:SELECT * FROM "DataTable" WHERE item_name = 'MyItemName'

然後獲取屬於該'item_name'的ID ...

int blah; 
while (MyReader.Read()) 
{ 
    blah = MyReader.GetInt32("id"); 
} 

現在:我該如何使用DataTable來做到這一點?

我有一個片段,但我似乎無法顯示一個消息框返回值:

string test = Item1txt.Text; 

var query = producten.Rows.Cast<DataRow>().Where(x => x.Field<string>("item_name") == test); 
foreach (var st in query) 
{ 
    MessageBox.Show(st.ToString()); 
    // how can i show the id that belongs to "test" ? 
} 

回答

3

query將是IQueryable<DataRow>,所以st將是DataRow。試試這個:

foreach (var st in query) 
{ 
    MessageBox.Show(st.Field<int>("id").ToString()); 
} 

或者,如果你知道有將只與item_name項目,這裏是該做實質上是一樣的另一種版本,但可能更容易有點明白了:

var st = producten.Rows.Cast<DataRow>().FirstOrDefault(x => x.Field<string>("item_name") == test); 
if(item != null) 
{ 
    MessageBox.Show(st.Field<int>("id").ToString()); 
} 
+0

+1這就是我一直在尋找的。我認爲我的'linq'查詢出了問題,但它不是:D謝謝! – DeMama

+0

@DeMama樂意幫助 –

0

我通常使用DataTable的默認視圖的財產的RowFilter,但我必須承認我從來沒有做過LINQ,所以現在可能有更好的辦法...

2

你可以直接在數據表上使用linq,而不需要RowsCast

var query = producten.AsEnumerable().Where(x => x.Field<string>("item_name") == test); 
foreach (var st in query) 
{ 
    MessageBox.Show(st.Field<int>("id")); 
} 
+0

+1更好。謝謝 ! – DeMama