オブジェクトがそれほど複雑でない場合は、次を使用できます。
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/
そしてそれは前の質問への答えです:C#でDataTableをジェネリックリストに変換する
編集:これはlinqではなく、DataTable
私が書いたいくつかの拡張メソッドであることを追加する必要があります。また、マッピング先のオブジェクトのプロパティはDataTableのプロパティと同じ名前であるという規則に従って機能しています。もちろん、これを拡張してプロパティの属性を読み取ることも、メソッド自体Dictionary<string,string>
にマッピングを行うために使用できる単純なものを使用することもできます。params string[] excludeProperties
一部のプロパティを除外するために使用できる機能を使用して拡張することもできます。