我有一个DataTable,我从DataSet中提取。从DataTable,我想使用Where子句返回特定的行。我查看了“How can I select a row from a datatable using two variable values?”,但收到了错误
“无法将类型'System.Data.DataRow []'隐式转换为 'System.Data.DataRow'“
我搜索了谷歌,但找不到解决方案。
我的代码是:
mySqlDataAdapter.Fill(myDataSet);
DataTable dtTable = myDataSet.Tables[0];
DataRow dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString());
我该如何解决这个问题?
答案 0 :(得分:14)
即使您的查询只选择一行,DataTable的Select方法也会返回DataRow数组
DataRow[] dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString());
然后,如果你真的只想要一行,你可以轻松地获取预期行检查数组的长度。在这种情况下,我认为真的不需要花哨的Enumerable扩展方法
if(dr.Length > 0)
{
string avalue = dr[0]["AColumnName"].ToString();
...
}
答案 1 :(得分:1)
Select()返回一个行数组,然后将其分配给一行。
你可以这样做:
DataRow dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()).First();
或
var dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString());
将为您提供一系列行。
答案 2 :(得分:0)
假设只有一个独特的结果
DataTable dtTable = myDataSet.Tables[0];
DataRow[] drs = dtTable.Select("VendorID = " + Session["VendorId"].ToString());
if(drs.Length > 0)
DataRow dr = drs[0];
答案 3 :(得分:0)
DataTable.Select()
会返回DataRow
数组。
DataRow[] dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString());
如果您只想要第一条记录,
DataRow[] dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()).FirstOrDefault();
答案 4 :(得分:0)
使用方法First()
:
DataRow dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()).First();
答案 5 :(得分:0)
在您的情况下,Select()方法返回一个内部有一个DataRow的IEnumerable集合。您必须使用FirstOrDefault()从该集合中提取DataRow。