如何在 SQL 查询之外应用订单(即 - 在应用程序级别而不是 SQL 服务器级别)?
How to apply the order by outside of the SQL query (that is - at application level instead of the SQL server level)?
var data = await _context.myData.AsNoTracking()
.Where(usr=>usr.User.Profile.Email==email)
.Select(usr=>new myDTO
{
uID=usr.Id,
uname=usr.Name,
})
.OrderByDescending(usr => usr.DateReg)
.ToListAsync();
我正在使用 entity framework 编写查询。这将通过在 SQL 服务器级别排序来执行顺序。
如何改为在应用程序级别进行排序?
我尝试了 .ToListAsync().OrderBy...
,但是在 ToListAsync()
上没有像 OrderBy..
这样的方法
我不完全确定您为什么要在内存中排序而不是让数据库执行,而不是尝试基于 EF 无法转换为 SQL 的内容进行排序。但是这样做:
var data = await _context.myData.AsNoTracking()
.Where(usr=>usr.User.Profile.Email==email)
.Select(usr=>new myDTO
{
uID=usr.Id,
uname=usr.Name,
DateReg = usr.Datereg
})
.ToListAsync();
var orderedData = data.OrderByDescending(usr => usr.DateReg);
由于您正在投影到 DTO,因此您需要在 DTO 中包含您将用于排序的任何内容,因为数据将是 List<myDTO>
,并且无法访问实体。
一般来说,除非你必须在内存中排序,因为调用计算之类的东西绝对不能以可以发送到 SQL 的方式重写,否则通常让数据库更好做订单。通常可以通过查看执行计划和调整索引来解决基础查询的任何性能问题。
var data = await _context.myData.AsNoTracking()
.Where(usr=>usr.User.Profile.Email==email)
.Select(usr=>new myDTO
{
uID=usr.Id,
uname=usr.Name,
})
.OrderByDescending(usr => usr.DateReg)
.ToListAsync();
我正在使用 entity framework 编写查询。这将通过在 SQL 服务器级别排序来执行顺序。
如何改为在应用程序级别进行排序?
我尝试了 .ToListAsync().OrderBy...
,但是在 ToListAsync()
OrderBy..
这样的方法
我不完全确定您为什么要在内存中排序而不是让数据库执行,而不是尝试基于 EF 无法转换为 SQL 的内容进行排序。但是这样做:
var data = await _context.myData.AsNoTracking()
.Where(usr=>usr.User.Profile.Email==email)
.Select(usr=>new myDTO
{
uID=usr.Id,
uname=usr.Name,
DateReg = usr.Datereg
})
.ToListAsync();
var orderedData = data.OrderByDescending(usr => usr.DateReg);
由于您正在投影到 DTO,因此您需要在 DTO 中包含您将用于排序的任何内容,因为数据将是 List<myDTO>
,并且无法访问实体。
一般来说,除非你必须在内存中排序,因为调用计算之类的东西绝对不能以可以发送到 SQL 的方式重写,否则通常让数据库更好做订单。通常可以通过查看执行计划和调整索引来解决基础查询的任何性能问题。