Linq查询相关实体是否包含数组中的值
本文关键字:数组 包含 是否 查询 实体 Linq | 更新日期: 2023-09-27 18:10:08
我有一个名为JobReport的模型,它看起来像这样(简化)
public class JobReport
{
public JobReport()
{
WorkOrders = new List<WorkOrder>();
}
public int JobID { get; set; }
public List<WorkOrder> WorkOrders{ get; set; }
}
public class WorkOrder
{
public WorkOrder()
{
Total = 0;
}
public string Trade { get; set; }
public int WorkOrderID { get; set; }
public decimal? Total { get; set; }
}
我想运行一个Linq查询,它让我所有的工作有一个交易的工作订单,这是在一个传递的数组。
var trades = new string[] { }
我已经尝试了以下不工作的东西,因为它试图让我得到一个工作订单列表,当我实际上需要底层的工作。
问题似乎是因为我调用了Select
var jobsDB = db.Jobs.Include(x=>x.WorkOrders).ToList();
var jobs = (from p in jobsDB
select new JobReport()
{
JobID = p.JobID,
WorkOrders = p.WorkOrders.ToList()
}
jobs = jobs
.Select(x => x.WorkOrders
.Where(y => trades.Contains(y.Trade)));
可以:
jobs = jobs
.Where(x => x.WorkOrders.Any(y => trades.Contains(y.Trade)));
我通常处理这些问题的方式是,我看结果必须是什么(一个工作列表)——这意味着我们需要把Where
放在第一位,我们必须寻找一个工作被包括的条件。这有点像构造一个SQL查询—事实上,如果您愿意,您可以对大多数LINQ任务使用类似SQL的查询语法。