4

我有一个从数据集中提取的数据表。在 DataTable 中,我想使用 Where 子句返回特定行。我查看了“如何使用两个变量值从数据表中选择一行? ”但出现错误

“无法将类型 'System.Data.DataRow[]' 隐式转换为 'System.Data.DataRow'”

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

我的代码是:

mySqlDataAdapter.Fill(myDataSet);

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

我该如何解决这个问题?

4

6 回答 6

17

即使您的查询仅选择一行,DataTable的Select方法也会返回一个 DataRow 数组

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

然后,如果您真的只希望一行,您可以轻松地获取预期的行来检查数组的长度。在这种情况下,我认为实际上不需要花哨的 Enumerable 扩展方法

if(dr.Length > 0)
{
    string avalue = dr[0]["AColumnName"].ToString();
    ...
}
于 2013-07-08T19:48:28.547 回答
1

Select() 正在返回一个行数组,并且您将其分配给单行。

你可以做 :

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

或者

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

这将为您提供一组行。

于 2013-07-08T19:48:13.677 回答
0

假设只有一个独特的结果

DataTable dtTable = myDataSet.Tables[0];
DataRow[] drs = dtTable.Select("VendorID = " + Session["VendorId"].ToString());
if(drs.Length > 0)
    DataRow dr = drs[0];
于 2013-07-08T19:49:26.877 回答
0

DataTable.Select()返回一个数组DataRow

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

如果你只想要第一条记录,

DataRow[] dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()).FirstOrDefault();
于 2013-07-08T19:49:35.067 回答
0

使用方法First()

DataRow dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()).First();
于 2013-07-08T19:50:08.663 回答
0

在您的情况下, Select() 方法返回一个 IEnumerable 集合,其中包含一个 DataRow 。您必须改为使用 FirstOrDefault() 从该集合中提取 DataRow。

于 2013-07-08T19:50:22.157 回答