Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Filtering a datatable row using a where clause

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?

like image 267
Csharp Avatar asked Dec 02 '22 18:12

Csharp


2 Answers

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();
    ...
}
like image 130
Steve Avatar answered Dec 18 '22 22:12

Steve


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.

like image 31
Jonesopolis Avatar answered Dec 18 '22 22:12

Jonesopolis