2014-08-27 43 views
3

的記錄我有一個看起來像這樣的表稱爲值:實體框架選擇最近的每種記錄

+-------+------------+-----------+----------+ 
|Id  |DateTime |SensorId |Value  | 
+-------+------------+-----------+----------+ 

SensorId是一個外鍵的傳感器細節的表格。這個值表中將會有10m +記錄。

我可以運行這個sql命令來返回每個SensorId的最新記錄,它在大約0.3秒內運行。

SELECT a.* 
    FROM Values as a 
    INNER JOIN (
     SELECT SensorId, MAX(ID) maxId 
     FROM Values 
     GROUP BY SensorId 
    ) b ON a.SensorId = b.SensorId 
     AND a.Id = b.maxId 
ORDER BY a.SensorId ASC 

我怎樣才能做到與實體框架相同的輸出在C#應用程序,同時維持(或改善)的表現?

+0

使它成爲一個視圖,將視圖添加到EF。 – SteveCav 2016-05-05 05:47:43

回答

5

隨着LINQ到實體和lambda表達式,你可以做這樣的:

dataContext.Values.GroupBy(p => p.SensorId) 
    .Select(p => p.FirstOrDefault(w => w.Id == p.Max(m => m.Id))) 
    .OrderBy(p => p.SensorId).ToList() 

其中DataContext的是你ObjectContext類的實例。 ToList()編譯查詢。

+0

這可以運行,但需要6秒鐘才能運行。我需要它更快。 – 2014-08-28 10:00:52