我正在尝试从我的数据库中选择5个最旧的条目。我使用以下声明:
dbContext.Items.Take(5).OrderBy(i => i.LastCheck).ToListAsync();
这里的问题是EF首先从表中获取前5个项目,然后对它们进行排序。所以我总是从表中得到5个第一个条目。但是我想首先对项目进行排序,然后选择前5项,就像我执行这个sql命令一样:
select top 5 * from Items order by LastCheck asc
我在这里得到了正确的结果。
是否有可能在EF中执行此操作或是否必须执行查询?
答案 0 :(得分:4)
您必须切换Take()
和OrderBy()
dbContext.Items.OrderBy(i => i.LastCheck).Take(5).ToListAsync();
答案 1 :(得分:0)
认为这已经在上面得到了回答,但是: -
dbContext.Items.OrderBy(x=>x.LastCheck).Take(5).ToListAsync();
首先执行操作,将从列表中选择前5项,然后对这5项进行排序,而您要执行的操作是先将列表排序为日期顺序,然后排在前5位。
同样,如果您想先按最新排序,则上述查询(以确保其已排序)将变为: -
dbContext.Items.OrderByDescending(x=>x.LastCheck).Take(5).ToListAsync();
希望这有帮助!