Если объекты не слишком сложные, вы можете использовать это:
public static class DataTableExtensions
{
public static IList<T> ToList<T>(this DataTable table) where T : new()
{
IList<PropertyInfo> properties = typeof(T).GetProperties().ToList();
IList<T> result = new List<T>();
foreach (var row in table.Rows)
{
var item = CreateItemFromRow<T>((DataRow)row, properties);
result.Add(item);
}
return result;
}
private static T CreateItemFromRow<T>(DataRow row, IList<PropertyInfo> properties) where T : new()
{
T item = new T();
foreach (var property in properties)
{
property.SetValue(item, row[property.Name], null);
}
return item;
}
}
Теперь вы можете написать: var list = YourDataTable.ToList<YourEntityType>()
.
Вы можете прочитать об этом здесь: http://blog.tomasjansson.com/convert-datatable-to-generic-list-extension/
И это ответ на предыдущий вопрос: Преобразование DataTable в общий список в C #
РЕДАКТИРОВАТЬ: Я должен добавить, что это не linq, но некоторые методы расширения для DataTable
Я написал. Кроме того, он работает в соответствии с соглашением о том, что свойства в сопоставляемом объекте имеют то же имя, что и в DataTable. Конечно, это можно расширить, чтобы прочитать атрибуты свойств, или сам метод может принять простой Dictionary<string,string>
, который можно использовать для сопоставления. Вы также можете расширить его с помощью некоторых функций, которые принимают params string[] excludeProperties
, которые можно использовать для исключения некоторых свойств.