web-dev-qa-db-ja.com

where句を使用したデータテーブル行のフィルタリング

DataSetからプルしているDataTableがあります。 DataTableから、Where句を使用して特定の行を返したいと思います。 " 2つの変数値を使用してデータテーブルから行を選択するにはどうすればよいですか? "を見ましたが、エラーが発生します

「タイプ 'System.Data.DataRow []'を 'System.Data.DataRow'に暗黙的に変換することはできません」

グーグルを検索しましたが、解決策が見つかりませんでした。

私のコードは:

mySqlDataAdapter.Fill(myDataSet);

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

どうすればこれを解決できますか?

3
Csharp

Select DataTableのメソッドは、クエリが1つの行のみを選択した場合でも、DataRowの配列を返します。

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

次に、実際に1行だけが予想される場合は、予想される行を簡単に取得して、配列の長さを確認できます。この場合、派手な列挙可能な拡張メソッドは実際には必要ないというのが私の意見です。

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

Select()は行の配列を返し、それを単一の行に割り当てています。

できるよ :

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

または

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

これにより、行の配列が得られます。

1
Jonesopolis

一意の結果が1つだけであると仮定します

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

DataTable.Select()DataRowの配列を返します。

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

最初のレコードのみが必要な場合は、

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

メソッドFirst()を使用します:

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

Select()メソッドは、あなたの場合、1つのDataRowを含むIEnumerableコレクションを返します。代わりに、FirstOrDefault()を使用してそのコレクションからDataRowを抽出する必要があります。

0
Harkonnen