对 IQueryable 对象内的数据进行排序
Posted
技术标签:
【中文标题】对 IQueryable 对象内的数据进行排序【英文标题】:Sorting data inside of IQueryable object 【发布时间】:2021-09-19 21:22:55 【问题描述】:我在对 IQueryable 变量中的数据进行排序时遇到问题。
我的代码不是英文的,所以我将模拟重要的代码。
我的Order
类有一个OrderState
类的实例,我的OrderState
类有一个State
类的实例。
public class Order
public virtual ICollection<OrderState> OrderState get; set;
public class OrderState
public int OrderStateId get; set;
public int OrderId get; set;
public int UserId get; set;
public virtual ICollection<State> State get; set;
public partial class State
public string Name get; set;
在我的 API 服务类中,我想创建包含所有订单的列表,但每个订单仅上次创建 OrderState
类实例。我知道如何获取所有数据,但难以将 Orderstate
列表属性排序为只获取相关的OrderState
。我需要使用IQueryable
列表。
这是我的 API 代码:
var query = _context.Set<Database.Order>().AsQueryable();
if (search.UserId != 0)
query = query.Where(x => x.UserId == search.UserId);
if (search.OrderId != 0)
query = query.Where(x => x.OrderId == search.OrderId);
if (search.LoadCurrentOrderState)
// I don't know how to sort by orderstate desc and take only first item
query = query.Include("OrderState").Include("OrderState.State");
var entities = query.ToList();
return _mapper.Map<List<Model.Order>>(entities);
感谢任何帮助!
感谢您的宝贵时间
【问题讨论】:
您使用的是 EF 还是 EF Core?指定确切的版本。 EF Core v5.0.5 , .net core 3.1 @AlexanderPetrov 【参考方案1】:你很幸运:在 EF Core 5.0 中出现了Filtered include 功能。
query = query
.Include(o => o.OrderState.OrderByDescending(os => os.OrderStateId).Take(1))
.Include("OrderState.State");
这样的查询应该会给出想要的结果。Take(1)
返回第一项。
【讨论】:
以上是关于对 IQueryable 对象内的数据进行排序的主要内容,如果未能解决你的问题,请参考以下文章
Android-java-如何按对象内的某个值对对象列表进行排序
DataSourceResult不在kendo-grid中进行分页,过滤和排序