2011-09-12 15 views
1

は私が前に、関連する質問を結合し、そのHow could i define anonymous type?2つの匿名型

にgretat ansferを得る。しかし、今、私は疑問に思って、それは基本的に私は、キャッシュ内のいくつかの週次データを格納しています2つの匿名型

を組み合わせることが可能です以下のような私はそれが現在の週 のためのいくつかのデータが含まれている objectとして、私は anonymous typeを格納していると私は、そのオブジェクトの日常に、今日のデータを追加したい場合には

ので、関連questonで説明しました。

は、だから私は、片側からobjectとしてanonymous type内のデータを持っているし、別の私は全く同じ構造化anonymous typeを持っていると私は/ APPENDを行うobjectとしてanonymous typeである私の新しいanonymous typeに古いものからデータを追加し、戻ってそれを入れたいですキャッシュする。あなたは私の関連質問を見たい場合

私の匿名型は、そのように見える:

var jsonData = new { total = 0, page = 0, records = 0, 
        rows = new[] { new { dummy = "" } }; 

は、そこで問題は、私は私の場合には匿名のタイプを組み合わせることができる方法ですか?例えば

それは私がその

List<Data> weeklyFromCahce = GetFromCache() 
List<Data> todaysToCahce = GetFromDataBase(); 

と私はループtodaysToCahceけれどもとweeklyFromCahceに各項目を追加し、バックキャッシュへweeklyFromCahceを更新している置くよりのように行くだろう2つのコレクションになります。

私は似たような処理をしたいが、私の場合は匿名のタイプを使いたい。結合された結果は、anonymous typeである必要があります。このデータには、毎週のデータ+現在の日のデータが含まれており、キャッシュには新しいanonymous typeのキャッシュが2つの匿名インスタンスの結合結果を含むように更新されます。

+0

"結合する"どのくらい正確ですか? 2つのインスタンスと、結合された結果がどのようなものかの例を与えてください。 – Jon

+0

@Jon question updated – jason

+1

なぜあなたは匿名のタイプを主張しますか?複数の場所で同じデータ形式を使用する場合は、オブジェクトを導入することができます。 – henginy

答えて

1
var x = new { member1 = 123 }; 
var y = new { member2 = "qwerty" }; 
var z = new { part1 = x, part2 = y }; // combined 

? TSのコメント

var x = new { member1 = 123 }; 
var y = new { member2 = "qwerty" }; 
var z = new { member1 = x.member1, member2 = y.member2 }; // combined 

アップデート2

class DynamicPair<TX, TY> : DynamicObject 
{ 
    private readonly TX _x; 
    private readonly TY _y; 

    public DynamicPair(TX x, TY y) 
    { 
     _x = x; 
     _y = y; 
    } 

    public override bool TryGetMember(GetMemberBinder binder, out object result) 
    { 
     try 
     { 
      var property = typeof (TX).GetProperty(binder.Name); 
      if (property != null) 
      { 
       result = property.GetValue(_x, null); 
       return true; 
      } 

      property = typeof (TY).GetProperty(binder.Name); 
      if (property != null) 
      { 
       result = property.GetValue(_y, null); 
       return true; 
      } 
     } 
     catch 
     { 
     } 

     result = null; 
     return false; 
    } 

    public override bool TrySetMember(SetMemberBinder binder, object value) 
    { 
     // too lazy 
     return true; 
    } 
} 


class Program 
{ 
    private static DynamicPair<TX, TY> Combine<TX, TY>(TX x, TY y) 
    { 
     return new DynamicPair<TX, TY>(x, y); 
    } 

    static void Main(string[] args) 
    { 
     var x = new { a = 123 }; 
     var y = new { b = 222 }; 
     dynamic z = Combine(x, y); 
     Console.WriteLine("{0}, {1}", z.a, z.b); 
    } 
} 

ない、それはあなたのケースでは許容だが、まだそれが動作するかどうかを正確に確認した後に更新

+0

実際に結合されていません:)結果は、2つの別々の '匿名オブジェクト'を含む '匿名型'です。 – jason

+0

更新 – agibalov

+0

を参照してくださいまた、更新プログラム2を参照してください。 – agibalov

関連する問題