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());
どうすればこれを解決できますか?
Select DataTableのメソッドは、クエリが1つの行のみを選択した場合でも、DataRowの配列を返します。
DataRow[] dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString());
次に、実際に1行だけが予想される場合は、予想される行を簡単に取得して、配列の長さを確認できます。この場合、派手な列挙可能な拡張メソッドは実際には必要ないというのが私の意見です。
if(dr.Length > 0)
{
string avalue = dr[0]["AColumnName"].ToString();
...
}
Select()は行の配列を返し、それを単一の行に割り当てています。
できるよ :
DataRow dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()).First();
または
var dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString());
これにより、行の配列が得られます。
一意の結果が1つだけであると仮定します
DataTable dtTable = myDataSet.Tables[0];
DataRow[] drs = dtTable.Select("VendorID = " + Session["VendorId"].ToString());
if(drs.Length > 0)
DataRow dr = drs[0];
DataTable.Select()
はDataRow
の配列を返します。
DataRow[] dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString());
最初のレコードのみが必要な場合は、
DataRow[] dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()).FirstOrDefault();
メソッドFirst()
を使用します:
DataRow dr = dtTable.Select("VendorID = " + Session["VendorId"].ToString()).First();
Select()メソッドは、あなたの場合、1つのDataRowを含むIEnumerableコレクションを返します。代わりに、FirstOrDefault()を使用してそのコレクションからDataRowを抽出する必要があります。