2012-03-01 3 views
0

[MSDNからのCrossPost]IEnumerableからデータを取得しますか?

私はそれを反復してExcelファイルに変換するメソッドに汎用リストを送る必要があるというタスクがありました。私はすでにデータテーブルでこれを行いましたが、一般的なリストではいくつかの問題に直面しています(私はジェネリックリストをデータテーブルに変換したくありません)。私は答えのために私を助けるコードを貼り付けます。

私はExcelにそれをエクスポートする

  User obj = new User(1, "aaa"); 
      User obj1 = new User(2, "bbb"); 
      User obj2 = new User(3, "ccc"); 
      User obj3 = new User(4, "ddd"); 


      Student sobj = new Student(1, "aaa"); 
      Student sobj1 = new Student(2, "bbb"); 
      Student sobj2 = new Student(3, "ccc"); 
      Student sobj3 = new Student(4, "ddd"); 
      objList.Add(obj);ExportToExcel(objList); 

の一覧を表示するには、いくつかの項目を追加してい二つのジェネリックリスト

  List<User>  objList = new List<User>(); 
      List<Student> objStudent = new List<Student>(); 

//を持っていた、私は

以下のような方法にリストを渡しています
public void ExportToExcel<T>(IEnumerable<T> list) 
    { 
     PropertyInfo[] piT = typeof(T).GetProperties(); 

     var Users = list.ToList(); 

     Type myType = (typeof(T)); 
    } 

私のリストをIenumerableに渡しているときに、List IEnumerableにあるデータを取得できませんリスト。データを取得すると、さらに処理できます。いずれか私に良いアイデアを提案することができますか?

答えて

1

あなたがタイプT上のすべてのプロパティの値にアクセスする必要がある場合は、PropertyInfo.GetValueメソッドを使用することができます:あなたが受け取ることがあります示さ

をコメントに反応して

public void ExportToExcel<T>(IEnumerable<T> items) 
{ 
    var properties = typeof(T).GetProperties(); 

    foreach(var item in items) 
    { 
     foreach(var property in properties) 
     { 
      var value = property.GetValue(item, null); 

      // Do something else with the property's value 
     } 
    } 
} 

編集を単一のリストまたはリストのリスト。あなたはそれを反復処理し、個々のリストをエクスポート、その後、合成リストを取り、別のオーバーロードを追加することができます。

public void ExportToExcel<T>(IEnumerable<IEnumerable<T>> itemSets) 
{ 
    foreach(var itemSet in itemSets) 
    { 
     ExportToExcel(itemSet); 
    } 
} 
+0

こんにちは、ブライアン答えていただきありがとうございます。しかし、私が{{var value = property.GetValue(item、null)}}の値をGenericリストとして取得した場合、それをどのように反復するのでしょうか?私はこれに失敗した?これで私を助けてくれますか? – Bhuvan

+0

@Bhuvan: 'value'は' object'とタイプされます。より具体的な型が必要な場合は、それをキャストする必要があります。より具体的な例がなくてもあなたに指導を与えるのは難しいです。あなたがしようとしていることについてより多くの情報を提供できますか? –

+0

: - BLから、どのようなタイプのList to myメソッドを受け取ってもよいので、私は単一のリストを受け取ることができます(このためにサンプルスニペットを提供しました)。またはすべての子リストを含む親リスト。しかし問題はList With Listにあり、私は子リストの中の用語をキャストして反復することができません。値の型はOBJECTなので、DALではIEnumerable としてListを受け取っているので、私はEntity Typeを知らないかもしれません。我々任意の選択 – Bhuvan

1

いつもList<T>で作業する場合はIEnumerable<T>IList<T>に変更できます。 IEnumerableインターフェイスでは、コレクション内のデータにアクセスするためのメソッドは定義されていません。

あなたのニーズに合わせてICollection<T>を使用することもできます。

+0

を 'IList'はないかもしれませんが、'のIList は '確かにありません。さらに、OPがコレクションにデータを追加する必要がない限り、IEnumerable は、バックエンドデータソースがそれを処理するようにコーディングされている限り、データの遅延読み込みをサポートします。これにより、パフォーマンスの世界が変わることがあります。 OPはやや曖昧ですが、コレクションからオブジェクトを読み込もうとしているのか、コレクション内のオブジェクトのプロパティを読み込もうとしているのかは分かりません。 –

+0

私はを無視して混乱させないようにしました。パフォーマンスの部分についても、私はさらに詳しい説明をしたいと思います:) – PedroC88

+0

質問をすることは自由です(しかし、おそらくそれは二重引用符として閉じられるでしょう;))。 –

関連する問題