LocalDb中多列的最高效EF排序

时间:2014-02-03 22:56:44

标签: c# entity-framework linq-to-sql localdb

按四列降序排列LocalDb表的最有效方法是什么?我有一个跟踪文件存储层次结构的表。四个文件夹就像一个里程表(每个文件夹一个数字)。该表将此反映为“存储项目”。我需要使用所有四个文件夹找到最高的数字。

这是我目前使用的代码。我担心LocalDb数据库不高效或准确......

public StorageItem GetLastItem()
{
    var item = _context.StorageItems.AsNoTracking()
               .OrderByDescending(x => x.LevelA)           // int
               .OrderByDescending(x => x.LevelB)           // int
               .OrderByDescending(x => x.LevelC)           // int
               .OrderByDescending(x => x.ItemNumber)       // int
               .Where(x => !x.AuditDateDeleted.HasValue)   // DateTime?
               FirstOrDefault();

    // Caching logic here

     return item;
}

1 个答案:

答案 0 :(得分:2)

我认为它不会效率低下,但链接一堆OrderByDescending可能不是你打算做的。目前,这应生成ORDER BY的SQL ItemNumber DESC, LevelC DESC, LevelB DESC, LevelA DESC子句。我想你想用ThenByDescending ...

var item = _context.StorageItems.AsNoTracking()
           .Where(x => !x.AuditDateDeleted.HasValue)
           .OrderByDescending(x => x.LevelA)        
           .ThenByDescending(x => x.LevelB)         
           .ThenByDescending(x => x.LevelC)          
           .ThenByDescending(x => x.ItemNumber)     
           .FirstOrDefault();

同样将where子句移到更高的位置,尽管我认为数据库应该足够智能以优化它。