LINQ条件OrderBy无效果,列表始终默认排序问题
LINQ条件排序无效的问题修复
核心问题很明确:LINQ的排序方法(比如OrderByDescending)不会修改原查询对象,而是返回一个包含排序规则的新IQueryable实例。你现在只是调用了排序方法,但没有把这个新实例重新赋值给query变量,所以原查询完全没应用任何排序逻辑,输出自然还是默认顺序。
修正后的代码如下:
var query = _context.Groups .Where(gr => gr.Status != ((sbyte)ActiveStatus.DELETED) && gr.OrganisationId == user.OrganisationId && (search != null && gr.Name != null ? gr.Name.Contains(search) : true) ) .Select(GroupReportModel.Projection); // 关键:将排序后的新查询对象赋值回query if(!pager.Sort.HasValue || pager.Sort.Value == ((int)Sort.MODIFIED)) query = query.OrderByDescending(gr => gr.Created.Date); if(pager.Sort.Value == ((int)Sort.NAME)) query = query.OrderByDescending(gr => gr.Name); pager.TotalRecords = query.Count(); var list = query.Skip(pager.PageCount != null ? pager.PageCount.Value * pager.Page.Value : 0) .Take(pager.PageCount != null ? pager.PageCount.Value : 0) .ToList();
额外优化:你原来代码里的true == true属于冗余写法,直接写true即可,上面的代码已经帮你修正了这一点。
内容的提问来源于stack exchange,提问作者GrandMassive
相关产品推荐
相关产品推荐

