Я звоню в метод, который возвращает List<MyViewModel>
и хочет заполнить DataTable
. Я не могу изменить возвращаемый тип, поскольку этот метод вызывается в нескольких других местах, которые нуждаются в нем в этой форме списка. Я знаю, что мог перебирать список и заполнить таблицу в одной строке за раз, но я надеялся, что было более элегантное решение, например, .Load
для iDataReader
.Легкий способ заполнения DataTable из списка <Model>?
ответ
Из комментариев, кажется, проблема реального является то, что вы хотите экспортировать сильно типизированный список в файл Excel, но библиотека используется только принимает DataTable.
Я предлагаю вам использовать EPPlus библиотеку вместо этого, который может загружать данные как с DataTable и коллекций, например:
sheet.LoadFromDataTable(myTable);
или
sheet.LoadFromCollection(myList);
EPPlus доступен как NuGet package тоже ,
В общем, вы можете легко преобразовать коллекцию в DataTable с ToDataTable() расширением MoreLINQ «s, например:
var myTable=myList.ToDataTable();
Вы можете найти код внутреннего абонента here. ПодробнееLINQ доступен как a NuGet package.
Спасибо, вы правы в моих намерениях, и я буду смотреть на EPPLus. Я также рассмотрю ссылку, чтобы исследовать ее более точно как учебное. – Matthew
ПодробнееLINQ - с открытым исходным кодом. Вы можете найти источник для ToDataTable [здесь] (https://github.com/morelinq/MoreLINQ/blob/master/MoreLinq/ToDataTable.cs) –
public DataTable TableFromMyViewModel(params MyViewModel[] items)
{
DataTable _result = new DataTable("MyViewModel");
// Do this for each field
_result.Columns.Add("Field1", typeof(String));
_result.Columns.Add("Field2", typeof(int));
_result.Columns.Add("Field3", typeof(String));
foreach (MyViewModel _item in items)
{
DataRow _row = _result.NewRow();
_row["Field1"] = _item.Field1;
_row["Field2"] = _item.Field2;
_row["Field3"] = _item.Field3;
_result.Rows.Add(_row);
}
return _result;
}
Вы правы, спасибо haha – maksymiuk
Просто любопытно - почему вы хотите преобразовать свет и читаемый 'List' в сложный объект DataTable? –
Fabio
Плагин, который я использую для экспорта информации в Excel, требует, чтобы входящие данные были в DataTable. – Matthew
Любое решение будет собирать петлю, поэтому я считаю, что классический цикл с добавлением строки для каждого элемента в списке будет достаточно простым. – Fabio