我在Stack Overflow上遇到了其他一些问题, 但我对现阶段对LINQ的了解不满意。就目前而言,我已经生成了一个LINQ查询来执行以下操作(伪):
select p.pid, p.pname, p.pdesc, e.eid, e.ename
max(pev.v), max(pev.date)
from
table p
inner join onto table pe (p.id = pe.pid)
inner join onto table e (e.id = pe.eid)
inner join onto table pev (pev.peid = pe.id)
group by pid, eid
在一个简化的示例中,可能类似于:
select a.id, a.name, max(b.date), max(b.value)
from a join b on a.id = b.id
group by a.id, a.name
LINQ查询如下-似乎可以按预期工作,但是我担心这只是fl幸。 对此发表任何评论。简而言之,我将p,pe,e和ev彼此结合在一起。由于ev中有多个匹配项,因此最终得到p,pe和e的重复项。我只想显示pev中的MAX日期的p,pe和e属性(也就是pev中的MAX v)。
var lQry = (from p in ctx.PS
join pe in ctx.PES
on p.pid equals pe.pid
join e in ctx.ES
on pe.eid equals e.eid
join pev in ctx.PEVS
on pe.peid equals pev.peid
select new
{
pid = p.pid,
pname = p.name,
pdesc = p.desc,
eid = e.id,
ename = e.name,
edesc = e.desc,
v = pev.v,
date = lev.date
}
into lTemp
group lTemp by new { lTemp.pid, lTemp.eid} into lGroup
select new
{
pid = lGroup.FirstOrDefault().pid,
pname = lGroup.FirstOrDefault().pname,
pdesc = lGroup.FirstOrDefault().pdesc,
eid = lGroup.FirstOrDefault().eid,
ename = lGroup.FirstOrDefault().edesc,
v = lGroup.Max(e => e.v),
date = lGroup.Max(e => e.date)
}).ToList();