datatable
の特定の行の特定の列の値を選択するには、LINQ (C#)
をどのように使用しますか。同等のSQL
は次のようになります。
select NAME from TABLE where ID = 0
前もって感謝します。
var name = from r in MyTable
where r.ID == 0
select r.Name;
行が一意の場合は、次のようにすることもできます。
var row = DataContext.MyTable.SingleOrDefault(r => r.ID == 0);
var name = row != null ? row.Name : String.Empty;
ご回答ありがとうございます。オブジェクト "MyTable"の種類(答え)がわからなかったため、次のコードで次のエラーが表示されました。
DataTable dt = ds.Tables[0];
var name = from r in dt
where r.ID == 0
select r.Name;
ソースタイプ 'System.Data.DataTable'のクエリパターンの実装が見つかりませんでした。 「どこ」が見つかりません
だから私はグーグルを続けて、うまくいくものを見つけました:
var rowColl = ds.Tables[0].AsEnumerable();
string name = (from r in rowColl
where r.Field<int>("ID") == 0
select r.Field<string>("NAME")).First<string>();
どう思いますか?
他の人が非ラムダ構文を与えていることに気づいたので、これを完全にするために、同等のラムダ構文を入れます:
非ラムダ(ジェームズの投稿による):
var name = from i in DataContext.MyTable
where i.ID == 0
select i.Name
同等のラムダ構文:
var name = DataContext.MyTable.Where(i => i.ID == 0)
.Select(i => new { Name = i.Name });
実用的な違いはあまりなく、あなたが好む個人的な意見だけです。
戻り値が文字列で、IDで検索する必要がある場合は、次を使用できます。
string name = datatable.AsEnumerable().Where(row => Convert.ToInt32(row["Id"]) == Id).Select(row => row.Field<string>("name")).ToString();
またはジェネリック変数を使用:
var name = datatable.AsEnumerable().Where(row => Convert.ToInt32(row["Id"]) == Id).Select(row => row.Field<string>("name"));
Linqを使用して、データテーブルをEnumerableとして設定し、探しているものと一致するデータテーブルフィールドからフィールドを選択します。
例
通貨が現地通貨である通貨テーブルから通貨IDと通貨名を取得し、フォームのテキストボックスに通貨IDと名前を割り当てます。
DataTable dt = curData.loadCurrency();
var curId = from c in dt.AsEnumerable()
where c.Field<bool>("LocalCurrency") == true
select c.Field<int>("CURID");
foreach (int cid in curId)
{
txtCURID.Text = cid.ToString();
}
var curName = from c in dt.AsEnumerable()
where c.Field<bool>("LocalCurrency") == true
select c.Field<string>("CurName");
foreach (string cName in curName)
{
txtCurrency.Text = cName.ToString();
}
var name = from DataRow dr in tblClassCode.Rows where (long)dr["ID"] == Convert.ToInt32(i) select (int)dr["Name"]).FirstOrDefault().ToString()
var x = from row in table
where row.ID == 0
select row
行について知っているDataTableがあると仮定すると、行インデックスを使用する必要があります。
where row[rowNumber] == 0
このインスタンスでは、選択を使用して、行データを匿名クラスまたは事前に準備されたクラスに配置することもできます(別のメソッドに渡したい場合)