2012-03-19 54 views
4

我需要在LINQ中編寫以下查詢方面的幫助。理想情況下,我想使用一個變量(作爲參數傳入)作爲Top X值。建議感激。在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行。

+0

請告訴我們你目前有什麼。 – 2012-03-19 17:13:24

回答

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查詢。

3

您需要在Linq查詢中使用Take()方法。我不認爲這是可能使用的查詢語法,但你可以做這樣的事情

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

順便說一句,好像你的SQL可以簡化(除非我沒有正確理解你的模型)到

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

提交我的答案並看到Eric的後,我重新閱讀你的問題,這是你想要的。 – scottheckel 2012-03-19 17:22:35

+0

我需要從每個siteid中選擇每個id的前3,因此請使用外部查詢進行連接。 – stats101 2012-03-19 17:38:14

+0

哦....使用@ Marcin的答案 – scottheckel 2012-03-19 19:23:00