2017-03-09 6 views
0

私は実際には、複数のデータベースにまたがる複数のストアドプロシージャに基づいてC#で動的レポートを作成し、結果を結合しようとしています。ここ複数の動的オブジェクトリストを結合する

は一例であり:

リスト1: "キー" 欄は、動的であり、各リストに組み込まれて結果が動的であることを知っ

{ monthyear = '032016', submitted = '56', approved = '27'}, 
    { monthyear = '042016', submitted = '67', approved = '30'} 

一覧2

{ monthyear = '032016', returned = '17'}, 
    { monthyear = '042016', returned = '22'} 

。私はしかし、リストを結合するキー列の文字列表現を取得することができます。

私が探しています結果は次のとおりです。

{ monthyear = '032016', submitted = '56', approved = '27', returned = '17'}, 
    { monthyear = '042016', submitted = '67', approved = '30', returned = '22'} 

どちらリスト

IEnumerable<object>の意図した結果と IEnumerable<object>として保存されます。

これらを結合する方法はありますか、連結しないでループすることはありませんか?

答えて

1

しかしi`mわからない、それが内部的に実装される方法

編集

この場合you`ll必要としています最初にリフレクションを使用する(これを強化することができます)

foreach (PropertyInfo p in typeof(firstObj).GetProperties()) 
     { 
      foreach (PropertyInfo p2 in typeof(secondObject).GetProperties()) 
       if (p.Name == p2.Name) 
        match = p.Name; 
     } 

は今変数試合は、文字列

list1.Join(list2, a=>a.GetType().GetProperty(match).GetValue(a,null), b => b.GetType().GetProperty(match).GetValue(b,null), (a, b) => new { a.first, a.second..... }); 

または

, (a,b) => new { a, b}); 

としてキーを格納し、私のガイドは、あなたが彼らを知っている `tを場合は、すべてのプロパティを選択しthisthis

moreverチェックthisました名前

これが役に立ちます

+0

問題は、リンク列が何であるかの結果を取得するまでわからないので、月経について知る必要があるラムダ構文を使用することはできません。 – duckmike

+0

一致はどこに定義されていますか、どのタイプのオブジェクトですか? – duckmike

+0

一致は文字列です –

0

SPの結果をデータベースから受け取ったときにループする以外の理由がある場合は、ループが必要になります。

これ以外にも、最終結果を保持するDictionary<string, Dictionary<string, object>>を持つことができます。リフレクションでは、レコードが入ってくるごとにすべてのプロパティを取り出すことができ、レコードごとにDictionary<string, object>にドロップすることができます(プロパティ名でキー付け、値はプロパティ値)。そして、これらの辞書を大きいものDictionary<string, Dictionary<string, object>>にマージします。これはあなたが興味を持っているプロパティ(「月刊」プロパティのように見えます)によってキーが付けられます。

反射が必要でない場合もあります。 DataTableを使用している場合、すべてのレコードフィールドの名前と値にプログラムでアクセスできます。あなたはこの

var res = list1.Join(list2, a => a.monthyear , b => b.monthyear , 
(a, b) => new { a.monthyear,a.returned, b.submitted, b.approved}); 

として参加するクエリを書くことができますLINQで

関連する問題