Linq with Aggregate inside Join

时间:2016-05-10 15:27:44

标签: c# linq

我正在尝试在连接中进行聚合。我有一个包含许多样本的工作量,我想构建一个" mini" Workload对象,其具有来自Workload的一些属性以及来自子实体样本的聚合(例如,max)的其他属性。我正在使用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。

我该怎么做?

1 个答案:

答案 0 :(得分: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)
                    });

此方法基于键选择器函数连接两个序列,并为每个元素组合所有结果匹配