linq with having和sub query

时间:2012-12-06 07:25:52

标签: sql linq entity-framework

如何将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
    )
)

1 个答案:

答案 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。不过,免费版本不包括自动完成功能。