2012-04-16 84 views
3

我試圖創建一個Linq查詢EF連接2內部選擇的值。下面你會發現的SQL查詢做的伎倆,試圖在LINQ to做,當事情更加棘手。林克查詢與內部選擇在EF的兩個連接

我使用POCO對象,並希望查詢返回列表而不是匿名類型。這可能與LINQ到EF?

 
SELECT s1.* 
FROM [Statistics] s1 
INNER JOIN 
(
    SELECT MAX(CreateDate) as createdate 
    FROM [Statistics] 
    GROUP BY UserId 
) s2 
ON s1.UserId = s2.[UserId] and s1.CreateDate = s2.createdate 
ORDER BY s1.Balance desc 
+0

這個SQL是無效的,因爲S2只有骨料,CREATEDATE,並沒有一個用戶ID列。修正:SELECT S1 * FROM [統計] S1 INNER JOIN ( \t SELECT用戶ID,MAX(CREATEDATE)作爲CREATEDATE \t FROM [統計] \t GROUP BY用戶ID )S2 ON s1.UserId = S2。用戶名和s1.CreateDate = s2.createdate ORDER BY s1.Balance遞減 – 2012-04-16 17:25:41

回答

2

您可以通過Where或Join進行此操作。

from s1 in Statistics 
join s2 in (from s in Statistics group s by s.UserId into g 
select new { UserId = g.Key, CreateDate = g.Max (s => s.CreateDate) }) 
on new { s1.UserId, s1.CreateDate } equals new { s2.UserId, s2.CreateDate } 
orderby s1.Balance descending 
select s1; 

或者,

from s1 in Statistics 
from s2 in (from s in Statistics group s by s.UserId into g 
select new { UserId = g.Key, CreateDate = g.Max (s => s.CreateDate) }) 
where s1.UserId == s2.UserId && s1.CreateDate == s2.CreateDate 
orderby s1.Balance descending 
select s1; 
+0

很大的幫助,就像一個魅力! – Frank 2012-04-16 18:33:44