2016-05-10 16 views
1

私は結合内で集約をしようとしています。私は多くのサンプルを含むワークロードを持っており、ワークロードからのいくつかのプロパティを持つ「ミニ」Workloadオブジェクトと、子エンティティサンプルから集約された(例えば最大)ものを構築したいと考えています。私はうまく動作するエンティティを結合するLINQ結合を使用していますが、私は集約を行うことはできません。Linqと集約内の結合

var workloads = Ctx.Workloads 
.Join(Ctx.Samples, 
     s => s.WorkloadId, 
     w => w.WorkloadId, 
     (w, s) => new { s, w }) 
     .Select(x => new MiniWorkload() 
       { 
        WorkloadId = x.w.WorkloadId, 
        WorkloadName = x.w.WorkloadName, 
        MaxOfSampleDate = Max(x.s.SampleDate) 
       }); 

三行目MaxOfSampleDate = Max(x.s.SampleDate)が作られ、コンパイルされませんが、うまくいけば、私が欲しいものを表現する - 子エンティティの最大SampleDate。

どうすればよいですか?あなたが必要なもの

+0

SampleDateを、定義されているリストオブジェクトにします。 – jdweng

答えて

1

GroupJoinです:

var workloads = Ctx.Workloads 
.GroupJoin(Ctx.Samples, 
      s => s.WorkloadId, 
      w => w.WorkloadId, 
      (w, ss) => new { ss, w }) 
      .Select(x => new MiniWorkload() 
        { 
         WorkloadId = x.w.WorkloadId, 
         WorkloadName = x.w.WorkloadName, 
         MaxOfSampleDate = x.ss.Max(s => s.SampleDate) 
        }); 

この方法は、キーセレクター関数およびグループ各要素のすべての結果の一致に基づいて2つのシーケンスを結合します。