2016-03-19 1 views
4

を計算します。クラスは、多かれ少なかれ、このようになります。私はすべてのテストを何度も走っているは、2つの値によってグループ化し、私はいくつかのベンチマークテストの結果を含むクラスを持っている第三1

public class TestResult 
{ 
    public string TestName { get; set; } 
    public int SampleSize { get; set; } 
    public double Result { get; set; } 
} 

ので、私は次のように、各サンプルサイズのための多くの結果を持っています。今

TestName: "MemoryTest", SampleSize: 1024, Result: 2.4741 
TestName: "MemoryTest", SampleSize: 1024, Result: 2.5029 
TestName: "MemoryTest", SampleSize: 1024, Result: 2.4902 
TestName: "MemoryTest", SampleSize: 2048, Result: 4.5654 
TestName: "MemoryTest", SampleSize: 2048, Result: 4.7156 
TestName: "MemoryTest", SampleSize: 2048, Result: 4.2238 
TestName: "MemoryTest", SampleSize: 4096, Result: 10.1863 
TestName: "MemoryTest", SampleSize: 4096, Result: 9.9471 
TestName: "MemoryTest", SampleSize: 4096, Result: 10.2240 

TestName: "GraphicsTest", SampleSize: 1024, Result: 2.4741 
TestName: "GraphicsTest", SampleSize: 1024, Result: 2.5029 
TestName: "GraphicsTest", SampleSize: 1024, Result: 2.4902 
TestName: "GraphicsTest", SampleSize: 2048, Result: 4.5654 
TestName: "GraphicsTest", SampleSize: 2048, Result: 4.7156 
TestName: "GraphicsTest", SampleSize: 2048, Result: 4.2238 
TestName: "GraphicsTest", SampleSize: 4096, Result: 10.1863 
TestName: "GraphicsTest", SampleSize: 4096, Result: 9.9471 
TestName: "GraphicsTest", SampleSize: 4096, Result: 10.2240 

私が作成したいですすべての結果の平均を含むリスト。ただし、TestNameとSampleSizeの両方でグループ化されています。各SampleSizeの平均値で、MemoryTestのための3 GraphicsTest用と3:

上記の例で見ると、私は6結果を含むリストを持っているしたいと思います。

私はトラブル二つの異なる列によってグループ化を持っています。

 var _Consolidation = 
      from _R in Results 
      group _R by new { _R.TestName, _R.SampleSize } into _G 
      select new TestResult() 
      { 
       TestName = _G.Key.TestName, 
       SampleSize = _G.Key.SampleSize, 
       Result = from _Res 
         in Results 
         where _Res.TestName == _G.Key.TestName && _Res.SampleSize == _G.Key.SampleSize 
         select _X => new 
         { 
          // ? Average Result? How to calculate it? 
         } 
      }; 

しかし、私は、私は「かはわからない:

私の最善のアプローチはこれまでのところです...私はいくつかの方法のためにそれを試してみたが、私はそれに把握を取得することはできません正しい道を行く。

答えて

1

、あなたが持っている匿名型によってグループに必要な、そしてグループ化を平均化することは、単にグループの集合に対する平均である:

var query = items 
    .GroupBy(x => new {x.TestName, x.SampleSize}) 
    .Select(x => new TestResult 
    { 
     TestName = x.Key.TestName, 
     SampleSize = x.Key.SampleSize, 
     Result = x.Average(y => y.Result) 
    }); 

グループ化を理解する鍵グループは本質的にキー/値のコレクションであり、そのキーはグループ化されたものであり、値はグループセレクタを満たしたすべてのアイテムの集合です。コレクションは、グループごとに対処するよりもできることです。

2

あなたはresultselectorを使用してGroupBythis overloadを使用することができます。(k, v)k

var result = tests.GroupBy(t => new { t.TestName, t.SampleSize }, 
      (k, v) => new 
      { 
       SampleSize = k.SampleSize, 
       TestName = k.TestName, 
       Average = v.Average(t => t.Result) 
      }); 

はあなたがでグループ化された鍵であり、vは、各グループ内のすべての要素です。あなたが近くにいる

関連する問題