2013-07-08 54 views
1

我有一個DataTable,我從數據集中提取。從DataTable中,我想使用Where子句返回一個特定的行。我看着 「How can I select a row from a datatable using two variable values?」,但我得到一個錯誤使用Where子句過濾數據錶行

「無法隱式轉換類型 '的System.Data.DataRow []' 到 '的System.Data.DataRow'」

我搜索谷歌,但找不到解決方案。

我的代碼是:

mySqlDataAdapter.Fill(myDataSet); 

DataTable dtTable = myDataSet.Tables[0]; 
DataRow dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()); 

我怎樣才能解決這個問題?

回答

11

一個DataTable的Select方法返回的DataRow數組即使你的查詢只選擇一個行

DataRow[] dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()); 

然後,如果你真的希望只有一行,你可以很容易地搶了預期的行檢查數組的長度。在這種情況下,我認爲,真正需要沒有花哨的可枚舉擴展方法

if(dr.Length > 0) 
{ 
    string avalue = dr[0]["AColumnName"].ToString(); 
    ... 
} 
+0

冰球!那很簡單。謝謝史蒂夫。 – Csharp

0

Select()返回一個行數組,並將其分配給一行。

你可以這樣做:

DataRow dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()).First(); 

var dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()); 

,這將給你行的陣列。

+0

無法在智能感知 – Csharp

+0

找到FirstOrDefault你需要.NET> = 3.5和System.Data.DataSetExtensions和System.Linq的這個工作的參考.. – Oscar

0

Asuming只有一個唯一的結果

DataTable dtTable = myDataSet.Tables[0]; 
DataRow[] drs = dtTable.Select("VendorID = " + Session["VendorId"].ToString()); 
if(drs.Length > 0) 
    DataRow dr = drs[0]; 
0

DataTable.Select()返回DataRow數組。

DataRow[] dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()); 

如果你只想在第一個記錄,

DataRow[] dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()).FirstOrDefault(); 
0

使用方法First()

DataRow dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()).First(); 
0

的select()方法中返回一個DataRow的IEnumerable集合,在你案件。您必須使用FirstOrDefault()從該集合中提取DataRow。