これが何よりも「できるかやってみよう」です。
複数の列を持つ DataTable があるとします。linq を使用して、匿名型の各プロパティが DataTable の列名に従って命名され、各プロパティの型が設定される匿名型のシーケンスになるように、テーブルの行を選択することは可能ですか?適切に。
したがって、私の DataTable に次のような 3 つの列がある場合:
Name = "Column1", DataType = string
Name = "Column2", DataType = integer
Name = "Column3", DataType = bool
次に、匿名型に 3 つのプロパティがあるように、DataTable のすべての行を選択します。
DataSet ds = functionThatGetsADataSet();
var seq = ds.Tables[0].AsEnumerable().Select( r => **** MAGIC HERE ****)
foreach (var s in seq)
{
Console.WriteLine(s.Column1);
Console.WriteLine(s.Column2);
Console.WriteLine(s.Column3);
}
私はこれを行うことができることを知っています:
DataSet ds = functionThatGetsADataSet();
var seq = ds.Tables[0].AsEnumerable().Select( r =>
new
{
Column1 = r.Field<string>("Column1"),
Column2 = r.Field<int>("Column2"),
Column3 = r.Field<bool>("Column3"),
}
)
foreach (var s in seq)
{
Console.WriteLine(s.Column1);
Console.WriteLine(s.Column2);
Console.WriteLine(s.Column3);
}
ただし、これには new 句でプロパティ名をハードコーディングする必要がありますが、プロパティ名は DataTable の Columns コレクションから取得したいと考えています。
これを十分に明確に説明したことを願っています。これを少しいじった後、読みやすさと保守性に関する限り、私が思いついたものはすべて大きな混乱になると思い始めていますが、質問してみようと思いました。