3

私はこれらの2つのクラスを持っています:

class ZoneInformation : Scores
{
    public string Zone {get;set;}
}

class Scores
{
    public string TypeQ {get;set;}
    public int High {get;set;}
    public int Low {get;set;}
}

私は次のようなコレクションを作成します: ゾーンとそれぞれに 3 つの異なるタイプ:

Collection<ZoneInformation> Values = new Collection<ZoneInformation>();

Values.Add(new ZoneInformation{TypeQ="Type1", Zone="Zone1", High=5, Low=6});
Values.Add(new ZoneInformation{TypeQ="Type2", Zone="Zone1", High=7, Low=8});
Values.Add(new ZoneInformation{TypeQ="Type3", Zone="Zone1", High=9, Low=10});

Values.Add(new ZoneInformation{TypeQ="Type1", Zone="Zone2", High=11, Low=12});
Values.Add(new ZoneInformation{TypeQ="Type2", Zone="Zone2", High=13, Low=14});
Values.Add(new ZoneInformation{TypeQ="Type3", Zone="Zone2", High=15, Low=16});

「値」コレクションの要素をすべてのゾーンで「グループ化」するにはどうすればよいですか? このような

new Scores{TypeQ="Type1", High=16, Low=18});

ご覧のとおり、High=5+11、2 つの「Type1」の合計

4

2 に答える 2

4

これは、Linq を使用すると非常に簡単です。

var groups = Values.GroupBy(zi => zi.TypeQ)
                   .Select(g => new Scores
                         {
                         TypeQ = g.Key, 
                         High  = g.Sum(zi=> zi.High), 
                         Low   = g.Sum(zi=> zi.Low)
                         }
              );
于 2013-10-17T19:28:57.943 に答える
1

他の人が言ったこと、または別の構文で:

var res = from q in Values
          group q by q.TypeQ into x
          select new Scores()
          {
              TypeQ = x.Key,
              High = x.Sum( y => y.High ),
              Low = x.Sum( y => y.Low ),
          };
于 2013-10-17T19:36:33.333 に答える