2013-07-08 2 views
1

У меня есть DataTable, который я извлекаю из DataSet. Из DataTable я хочу использовать предложение Where для возврата определенной строки. Я посмотрел на "How can I select a row from a datatable using two variable values?", но я получаю сообщение об ошибкеФильтрация строки данных с использованием предложения where

"Не удается неявно преобразовать тип 'System.Data.DataRow []' в 'System.Data.DataRow"

Я искал Google , но не смог найти решение.

Мой код:

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

Не удалось найти FirstOrDefault в intellisense – Csharp

+0

Вам нужно .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

Выбрать() возвращает IEnumerable коллекцию с одним DataRow внутри, в вашем дело. Вы должны извлечь DataRow из этой коллекции с помощью FirstOrDefault().

Смежные вопросы