按四列降序排列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;
}
答案 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子句移到更高的位置,尽管我认为数据库应该足够智能以优化它。