Filtering a datatable row using a where clause

荒凉一梦 提交于 2020-01-24 09:10:06

问题


I have a DataTable that I am pulling from a DataSet. From the DataTable, I want to use the Where clause to return a particular row. I looked at "How can I select a row from a datatable using two variable values?" but I get an error

"Cannot implicitly convert type 'System.Data.DataRow[]' to 'System.Data.DataRow'"

I searched google, but could not find a solution.

My code is:

mySqlDataAdapter.Fill(myDataSet);

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

How can I resolve this?


回答1:


The Select method of a DataTable returns an array of DataRow even if your query selects only one row

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

Then, if you really expects just one row, you could easily grab the expected row checking for the length of the array. In this case it is my opinion that no fancy Enumerable extension methods are really needed

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



回答2:


Select() is returning an array of rows, and you're assigning it to a single row.

You can do :

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

or

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

which will give you an array of rows.




回答3:


Asuming there is only one unique result

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



回答4:


DataTable.Select() returns an array of DataRow.

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

If you only want the first record,

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



回答5:


Use the method First():

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



回答6:


The Select() method returns an IEnumerable collection with one DataRow inside, in your case. You must extract the DataRow from that collection with FirstOrDefault() instead.



来源:https://stackoverflow.com/questions/17534724/filtering-a-datatable-row-using-a-where-clause

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!