获取和过滤 iqueryable 对象内的多个类
Posted
技术标签:
【中文标题】获取和过滤 iqueryable 对象内的多个类【英文标题】:Get and filter multiple classes inside of iqueryable object 【发布时间】:2021-10-04 16:08:32 【问题描述】: 我不知道如何让这个查询工作! 我需要创建可查询的订单列表,并仅从 OrderState 类中选择 StateId 等于所需数量的订单 这是我的模型课程!public class Order
public virtual ICollection<OrderState> OrderState get; set;
public class OrderState
public int OrderStateId get;set;
public int OrderIdget;set;
public int StateIdget;set;
public virtual ICollection<State> State get; set;
public partial class State
public int StateIdget;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);
任何帮助表示赞赏!
感谢您尝试提供帮助!!!
【问题讨论】:
【参考方案1】:所以 orderstate 列表是订单所在状态的历史记录?顺便说一句,如果 orderstate 表有更多列,比如订单转换到该状态的日期时间,它可能会更有用。Order 中的 orderstate 集合也应该称为 OrderStates 复数,因为它是一个集合。这样做会使代码更具可读性/自我描述性;复数本质上是说“你可以在我身上调用 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)
【讨论】:
以上是关于获取和过滤 iqueryable 对象内的多个类的主要内容,如果未能解决你的问题,请参考以下文章
如何通过猫鼬(javascript)中的多个值查询数组内的对象?
我应该何时使用 IEnumerable 以及何时使用 IQueryable?