考虑三个IQueryable:tableA,tableB和tableC。 它们都有3个值的组合键a,b和c。 我将需要获取tableB,d中一列的总和,并按a,b和c进行分区。如何将三个表连接在一起以得到准确的分区来选择新对象?我的编译器总是显示错误。
这是我尝试过的基本查询:
from A in tableA
join B in tableB on new { A.a, A.b, A.c } equals new { B.a, B.b, B.c } into p1
group B by new { B.a, B.b, B.c } into p2
from q2 in p2
join C in tableC on new { A.a, A.b, A.c } equals new { C.a, C.b, C.c } into p3
from results in p3
select new NewObject
{
Column1 = p3.A.a,
Column2 = p3.A.b,
Column3 = p3.A.c,
Column4 = Sum(p3.C.d),
Column5 = p3.B.e
};
我得到了一个关于模棱两可的调用的漫长错误,并且到处都有红线。我想我不太确定如何通过IQueryable对一个组进行多个联接。那有可能吗?
答案 0 :(得分:0)
我认为在这种情况下,您的查询可以通过简化联接,使用所有必需的列编写选择内容,然后按如下方式使用流畅的API来受益。我相信这个查询会达到您想要的结果。
var model = (from A in tableA
join B in tableB on new { A.a, A.b, A.c } equals new { B.a, B.b, B.c }
join C in tableC on new { A.a, A.b, A.c } equals new { C.a, C.b, C.c }
select new {
Aa = A.a,
Ab = A.b,
Ac = A.c,
Ba = B.a,
Bb = B.b,
Bc = B.c,
Be = B.e,
Ca = C.a,
Cb = C.b,
Cc = C.c,
Cd = C.d
})
.GroupBy(x => new {x.Ba, x.Bb, x.Bc})
.Select(grp => new {
Column1 = grp.First().Aa,
Column2 = grp.First().Ab,
Column3 = grp.First().Ac,
Column4 = grp.Sum(y => y.Cd),
Column5 = grp.First().Be
}).ToList();