获取并过滤可查询对象内部的多个 类

Get and filter multiple classes inside of iqueryable object


我不知道如何让这个查询工作!
我需要创建可查询的订单列表,并且 select 仅创建 class OrderState 中的 StateId 等于所需数量
的订单 这是我的模型 classes!
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 StateId{get;set;}
    public virtual ICollection<State> State { get; set; }       
}

public partial class State
{
    public int StateId{get;set;}
    public string Name{ get; set; }
}

这是我的代码
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.StateId!=0)
{
//query =get every Order where StateId from Orderstate == search.StateId
}

var entities = query.ToList(); 
return _mapper.Map<List<Model.Order>>(entities);

感谢您的帮助!!
感谢您的帮助!!!

所以 orderstate 列表是订单所处状态的历史记录?顺便说一下,如果 orderstate table 有更多列,比如订单转换到该状态的日期时间,它可能会更有用。此外,Order 中的 orderstate 集合应该称为 OrderStates plural,因为它是一个集合.这样做会使代码更 readable/self 描述;复数本质上是说“你可以对我调用 LINQ 东西”

无论如何,您可能想要“其中任何一个州是 X”

if(search.StateId!=0)
{
    query = query.Where(o => o.OrderStates.Any(os => os.StateId == search.StateId));
}

在 DB 上,这将转换为 FROM Orders o WHERE EXISTS(SELECT null FROM OrderStates os WHERE os.Id = o.Id AND os.StateId = @p1)