在 IQueryable 对象中对数据进行排序

Sorting data inside of IQueryable object

我在从 IQueryable 变量排序数据时遇到问题。

我的代码不是英文的,所以我会模拟重要的代码。

我的 Order class 有 OrderState class 的实例,我的 OrderState class 有 [=15= 的实例] class.

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 服务 class 中,我想创建包含所有订单的列表,但每个订单只有最后创建的 OrderState class instance.I 知道如何获取所有数据,但难以对 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 Core 5.0 中出现了 Filtered include 功能。

query = query
    .Include(o => o.OrderState.OrderByDescending(os => os.OrderStateId).Take(1))
    .Include("OrderState.State");

这样的查询应该会给出想要的结果。
Take(1) returns 第一项。