加入&小组&Max

时间:2018-06-24 09:18:17

标签: c# sql linq

我在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();

0 个答案:

没有答案