在执行外部联接和分组时,我无法让Linq statemnt工作。这是我试图完成的SQL版本:
select p.PRIMARY_KEY, min(p.EFFECTIVE_DATE), sum(IsNull(c.PAID_INDEMNITY, 0))
from PRMPOLCY p
left outer join CLMMAST c on p.PRIMARY_KEY = c.POLICY_NO
where p.UNDERWRITER_UID = 93
GROUP BY p.PRIMARY_KEY
这是我在Linq中所拥有的(不起作用):
var result = from p in context.PRMPOLCies
join c in context.CLMMASTs on p.PRIMARY_KEY equals c.POLICY_NO into polClm
where (p.UNDERWRITER_UID == underwriter)
from grp in polClm.DefaultIfEmpty()
group grp by p.PRIMARY_KEY into g
select new PolicySummation()
{
PolicyNo = g.Key,
Incurred = g.Sum(grp => grp.PAID_INDEMNITY ),
EffDate = g.Min(grp => grp.PRMPOLCY.EFFECTIVE_DATE
};
将我的头撞在墙上试图把它弄清楚!
答案 0 :(得分:1)
假设您在PRMPOLCY
和CLMMAST
之间设置了导航属性,则不应该明确指定连接。在没有显式连接的情况下在linq中表达大多数查询要容易得多,而是将结构视为层次结构。我不知道您的模型属性名称的具体细节,但我猜测这样的东西会起作用。
var result =
from p in context.PRMPOLCies
where (p.UNDERWRITER_UID == underwriter)
select new PolicySummation {
PolicyNo = p.PRIMARY_KEY,
Incurred = p.CLMASTs.Select(c => c.PAID_INDEMNITY).DefaultIfEmpty().Sum(),
EffDate = p.EFFECTIVE_DATE,
};
答案 1 :(得分:0)
您需要在group子句中包含这两个表,如下所示:
group new { p, grp } by p.PRIMARY_KEY into g
然后在Sum
/ Min
g.Sum(grp => grp.grp == null ? 0 : grp.grp.PAID_INDEMNITY )
g.Min(grp => grp.p.PRMPOLCY.EFFECTIVE_DATE)