我担心性能,特别是在大 table 上。
在我的示例中,StatusId是IDENTIY PRIMARY KEY

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

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

最佳答案

Entity Framework 会为我生成以下SQL:

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

尽管“Extent1”不容易阅读,但这似乎是获得所需结果的合理方法。参见例如How to read the last row with SQL Server

因此,我不认为在Entity Framework中有更好或更快的方法来执行此操作。

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

10-04 12:53