2014-08-27 38 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