4

リスト内のクラス プロパティを C# の別のクラスのリストのプロパティで埋める最良の方法を教えてください。

私は持っている

class Source 
{
   public object A {get; set;}
   public object B {get; set;}
   public object C {get; set;}
}

class Destination
{
   public object A {get; set;}
   public object B {get; set;} // (A,B) is a unique key
   public List<object> Cs {get; set;}
   public object D {get; set;} 
}

で、〜がある

List <Destination> destinations; // Cs = null
List <Source> sources; //may have zero, one or more than one Cs for (A,B) 

Cs of Destinations (または別のクラス) を C of Sources で埋めるにはどうすればよいですか? ここでLINQを使用することは可能ですか?

前もって感謝します!

4

2 に答える 2

3

救助へのLINQ:

sources = destinations.SelectMany(d => d.Cs);

あなたが望むかもしれません

sources = destinations.SelectMany(d => 
    d.Cs.Select(c => new Source { A = d.A, B = d.B, C = c })
);
于 2013-01-22T15:25:21.183 に答える
3

ソースを A と B (一意のキー) でグループ化し、グループ内のすべての項目から C を選択します。

var destinations = from s in sources
                   group s by new { s.A, s.B } into g
                   select new Destination()
                   {
                       A = g.Key.A,
                       B = g.Key.B,
                       Cs = g.Select(x => x.C).ToList()
                   };

既存の宛先を更新する必要がある場合は UPDATE

foreach(var d in destinations)
   d.Cs = sources.Where(s => s.A == d.A && s.B && d.B).ToList();

または(これはより高速になると思います)

var lookup = sources.ToLookup(s => new { s.A, s.B }, s => s.C);
foreach (var d in destinations)            
     d.Cs = lookup[new { d.A, d.B }].ToList();

デモ

于 2013-01-22T15:29:41.370 に答える