如何将linq写入包含having和sub查询的实体查询? 例如:
SELECT *
FROM dbo.Gavahi g
WHERE g.id NOT IN (
SELECT GavahiID
FROM dbo.AsnadMaliDetail ad
GROUP BY GavahiID
HAVING SUM (MablaghMoredEstefade) >= (
SELECT mablagh
FROM dbo.Gavahi g
WHERE g.id = ad.GavahiID
)
)
答案 0 :(得分:0)
如评论中所述,最好研究如何使用LINQ操作集合,而不是在SQL中思考,然后尝试找到合适的翻译。微软试图将LINish方法的SQLish名称用于LINQ方法,但事实是它们并不相似。
以下LINQ查询执行您在SQL中表达的内容,假设GavahiId是Gavahi的外键.Id:
var mablaghs = AsnadMaliDetails
.GroupBy(x => x.Gavahi)
.Where(g => g.Sum(y => y.MablaghMoredEstefade) < g.Key.Mablagh)
.Select(x => x.Key);
请注意,在MablaghMoredEstefade的SUM上反转条件允许直接选择GroupBy
键(Gavahi),而不是在其他地方使用主键NOT IN
进行操作。
如果您是LINQ的新手,但是您精通SQL,我建议您尝试LINQPad,它允许您一目了然地查看生成的SQL。不过,免费版本不包括自动完成功能。