我正在尝试实现一个有点棘手的Linq查询。
DB结构:
所有字段都是强制性的。
预期:
我想要找回:
发布于 2016-10-30 12:13:31
首先,您需要使用LEFT JOIN tableD和tableB和tableC。
var augmentedD =
from d in tableD
join b in tableB on d.IdB equals b.IdB into bs
join c in tableC on d.IdC equals c.IdC into cs
from b in bs.DefaultIfEmpty()
from c in cs.DefaultIfEmpty()
let idAA = b != null ? b.IdA : c != null ? c.IdA : (int?) null
where idAA != null
let idA = idAA.Value
select new
{
idA,
d
};然后,GroupJoin tableA给出了这个结果。
var nestedA = from a in tableA
join d in augmentedD on a.IdA equals d.idA into g
select
new
{
A = a,
D = g.OrderBy(x => x.d.NameD)
.Take(10)
.Select(x => x.d)
.ToList()
};编辑
如果要添加附加谓词,则将Where语句放在tableD之后
var augmentedD =
from d in tableD.Where(predicate)
join b in tableB on d.IdB equals b.IdB into bs
join c in tableC on d.IdC equals c.IdC into cs
from b in bs.DefaultIfEmpty()
from c in cs.DefaultIfEmpty()
let idAA = b != null ? b.IdA : c != null ? c.IdA : (int?) null
where idAA != null
let idA = idAA.Value
select new
{
idA,
d
};https://stackoverflow.com/questions/40327573
复制相似问题