实体框架为每种类型的记录选择最新记录

Mat*_*nch 3 c# sql linq asp.net-mvc entity-framework

我有一个名为values的表,如下所示:

+-------+------------+-----------+----------+
|Id     |DateTime    |SensorId   |Value     |
+-------+------------+-----------+----------+
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

如何在保持(或改进)性能的同时,在ac#应用程序中使用实体框架实现相同的输出?

ber*_*uan 7

使用LINQ to Entities和lambdas,您可以这样做:

dataContext.Values.GroupBy(p => p.SensorId)
     .Select(p => p.FirstOrDefault(w => w.Id == p.Max(m => m.Id)))  
     .OrderBy(p => p.SensorId).ToList()
Run Code Online (Sandbox Code Playgroud)

其中dataContext是您的ObjectContext类实例.ToList()编译查询.

  • 这可以工作,但需要 6 秒才能运行。我需要它更快。 (2认同)