У меня есть типично типизированный класс PersonExport
. пока я сначала получить данные в DataTable
и вызовите следующий метод на DataTable
, чтобы преобразовать его в List<PersonExport>
:Как преобразовать DataTable в список <object>?
public static List<T> ConvertToList<T>(DataTable dt, out string message)
{
message = string.Empty;
var list = new List<T>();
try
{
var columnNames = dt.Columns.Cast<DataColumn>()
.Select(c => c.ColumnName)
.ToList();
var properties = typeof(T).GetProperties();
list = dt.AsEnumerable().Select(row =>
{
var objT = Activator.CreateInstance<T>();
foreach (var pro in properties)
{
if (columnNames.Contains(pro.Name))
{
var value = row[pro.Name];
var typeName = value.GetType().FullName;
if (typeName == "MySql.Data.Types.MySqlDateTime")
{
var mySqlDateTime = (MySqlDateTime) value;
if (mySqlDateTime.IsValidDateTime)
{
value = Convert.ToDateTime(mySqlDateTime.ToString());
pro.SetValue(objT, value, null);
}
}
else
{
pro.SetValue(objT, row.IsNull(pro.Name) ? null : value, null);
}
}
}
return objT;
}).ToList();
}
catch (Exception ex)
{
message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
}
return list;
}
Однако, как только я начинаю удаление столбцов из DataTable
возвращаемых, он больше не работает, так как столбцы в DataTable
не соответствуют свойствам в списке PersonExport
.
Я в конце концов, с помощью экспортированного списка здесь, чтобы экспортировать, чтобы преуспеть, но он не работает, так как я модифицируется DataTable
и он не может Deserialize в List<PersonExport>
:
//Trying to get data into List<object>
List<object> persons = GetPersonExport(query, out message);
var exportData = new Dictionary<string, List<object>> { { "xldata", persons} };
//Deserialize to List<object> to export
var persons = JsonConvert.DeserializeObject<List<object>>(args["xldata"]);
выше линии просто возвращает Список пустых объектов.
Несколько вещей заставили меня думать, но мне интересно, какой может быть лучший подход. Я использую библиотеку EPPLUS для экспорта данных в excel, и у нее есть возможность скрывать столбцы, поэтому было бы лучше просто экспортировать весь объект и скрыть столбцы, которые вам не нужны, таким образом вы избегаете анонимного типа или того, что я может все же получить весь объект, но затем преобразовать его в DataTable, а затем удалить столбцы? Мысли?
Пожалуйста, не публикуйте весь код трудно читать все ваши вопросы. Просто спросите, чего вы хотите, не до и после истории. Конкретный вопрос о вашем названии достаточно много. – AuthorProxy
помогает ли мой ответ? – AuthorProxy