кто-либо знает как или некоторая библиотека использовать для этого?
Здесь можно найти библиотечную часть:
Приведенный ниже код - это код, который я использую для преобразования IEnumerable
в DataTable, содержащий столбцы, названные для каждого свойства, а также значения каждого элемента в IEnumerable рядами. Это очень маленький переход от этого до сохранения в виде CSV-файла
public class IEnumerableToDataTable
{
public static DataTable CreateDataTableForPropertiesOfType<T>()
{
DataTable dt = new DataTable();
PropertyInfo[] piT = typeof(T).GetProperties();
foreach (PropertyInfo pi in piT)
{
Type propertyType = null;
if (pi.PropertyType.IsGenericType)
{
propertyType = pi.PropertyType.GetGenericArguments()[0];
}
else
{
propertyType = pi.PropertyType;
}
DataColumn dc = new DataColumn(pi.Name, propertyType);
if (pi.CanRead)
{
dt.Columns.Add(dc);
}
}
return dt;
}
public static DataTable ToDataTable<T>(IEnumerable<T> items)
{
var table = CreateDataTableForPropertiesOfType<T>();
PropertyInfo[] piT = typeof(T).GetProperties();
foreach (var item in items)
{
var dr = table.NewRow();
for (int property = 0; property < table.Columns.Count; property++)
{
if (piT[property].CanRead)
{
dr[property] = piT[property].GetValue(item, null);
}
}
table.Rows.Add(dr);
}
return table;
}
}
Итак, вы можете написать следующее, чтобы преобразовать ваши данные в datatable:
IEnumerable<Thing> values = GetMyIEnumerableValues();
var tableOfData = IEnumerableToDataTable.ToDataTable(values);
Как только они появятся, довольно просто записать их в CSV-файл , или любой другой формат по вашему выбору, так как вся «сложная» работа по отражению для извлечения данных из IEnumerable
уже выполнена.