我正在尝试在连接中进行聚合。我有一个包含许多样本的工作量,我想构建一个" 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。
我该怎么做?
答案 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)
});
此方法基于键选择器函数连接两个序列,并为每个元素组合所有结果匹配。