在 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 第一项。
我在从 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 第一项。