【问题标题】:Sorting data inside of IQueryable object对 IQueryable 对象内的数据进行排序
【发布时间】: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

标签: .net entity-framework entity-framework-core iqueryable


【解决方案1】:

你很幸运:在 EF Core 5.0 中出现了Filtered include 功能。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多