9

私はLINQを発見したばかりなので、私と一緒に包括的にしてください! :-)

そう!データテーブルを提供するデータ層があり、それらをオブジェクトのリストに変換したいと考えています。これらのオブジェクトは、特定のレイヤー DTO (データ転送オブジェクト) で定義されます。

データテーブルのすべての行をオブジェクトにマップし、すべてのオブジェクトをリストに入れるにはどうすればよいですか? (今日はフィールドごとに「手動で」作成します)LINQで可能ですか?LINQ2Entities について聞いたことがありますか? 私は正しいですか?

初心者が理解できるように助けてくれてありがとう...

4

3 に答える 3

21

オブジェクトがそれほど複雑でない場合は、次を使用できます。

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一部のプロパティを除外するために使用できる機能を使用して拡張することもできます。

于 2010-11-16T10:57:03.857 に答える
0

The ADO.NET Entity Frameworkについて読むことをお勧めします。それはあなたが求めていることをサポートしており、リンクは十分な情報と例を提供するはずです:)

開始するためのトピックに関するチュートリアルもたくさんあります。

于 2010-11-16T10:19:36.360 に答える