获取并过滤可查询对象内部的多个 类
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)
我不知道如何让这个查询工作!
我需要创建可查询的订单列表,并且 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)