如何使用Entity Framework获取表中的最新行(考虑性能)?

时间:2014-03-11 10:58:40

标签: c# asp.net performance linq entity-framework

我对性能感到担忧,特别是在大桌子上。 在我的示例中,StatusId是IDENTIY PRIMARY KEY

我想知道是否有更好的方法(更快)来获取表格中的最后一个条目。

  public IQueryable<GaStatus> GetLastStatus()
    {
        return context.GaStatuses.OrderByDescending(x => x.StatusId).Take(1);
    }

2 个答案:

答案 0 :(得分:5)

Entity Framework为我生成以下SQL:

SELECT TOP (1) 
[Extent1].[StatusId] AS [StatusId]
FROM [dbo].[GaStatuses] AS [Extent1]
ORDER BY [Extent1].[StatusId] DESC

这看起来是获得理想结果的合理方式,尽管&#39; Extent1&#39;不容易阅读。请参阅示例How to read the last row with SQL Server

因此,我不相信在实体框架中有更好或更快的方法。

但是几乎总有一种方法可以改善给定SQL查询的性能。例如,查看特定数据库中的执行计划,ORDER BY执行聚簇索引扫描This might or might not be good from a performance point of view.因此,根据您的数据库,您可以通过直接编写SQL来识别性能问题并提高性能,而不是让Entity Framework为您生成它。

答案 1 :(得分:-2)

return context.GaStatuses.Max(x => x.StatusId);