Это упражнение «посмотрим, можно ли это сделать» больше всего на свете.
Предположим, у меня есть DataTable с несколькими столбцами.Используя linq, можно ли выбрать строки таблицы так, чтобы результатом была последовательность анонимного типа, где каждое свойство анонимного типа названо в соответствии с именем столбца DataTable, а тип каждого свойства установленсоответственно.
Итак, если мой DataTable имеет три столбца, например, так:
Name = "Column1", DataType = string
Name = "Column2", DataType = integer
Name = "Column3", DataType = bool
Затем я хочу выбрать все строки в 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);
}
, но это требует жесткого кодирования имен свойств в новом предложении, тогда как я хотел бы, чтобы имена свойств происходили из коллекции ColumnsDataTable.
Я надеюсь, что объяснил это достаточно ясно.Поэкспериментировав с этим немного, я начинаю думать, что все, что я придумаю, будет большим беспорядком с точки зрения читабельности и удобства сопровождения, но я подумал, что я спрошу.