使用Top X在LINQ中编写子查询

时间:2012-03-19 17:10:58

标签: c# .net sql linq

我在LINQ中编写以下查询时需要帮助。理想情况下,我想使用变量(作为参数传入)作为Top X值。建议表示赞赏。

SELECT *
FROM [Link] a
WHERE ID IN (SELECT TOP 3 ID 
         FROM [Link] b
         WHERE b.SiteID = a.SiteID
         ORDER BY a.ID)

内部查询使用SiteID连接,因为我正在尝试检索每个SiteID的前3行。

2 个答案:

答案 0 :(得分:5)

那是怎么回事:

from l in links
where
    (from l2 in links
     where l2.SiteID == l.SiteID
     orderby l2.ID
     select l2.ID).Take(3).Contains(l.ID)
select l

这就是你明确地将SQL翻译成LINQ查询。

答案 1 :(得分:3)

您需要在Linq查询中使用Take()方法。我不认为使用查询语法是可能的,但您可以执行类似

的操作

links.OrderBy(l => l.ID).Take(3);

顺便说一下,似乎你的SQL可以简化(除非我不能正确理解你的模型)

SELECT TOP 3 * 
FROM [Link] a
ORDER BY a.ID