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)));

Linq查询相关实体是否包含数组中的值

可以:

jobs = jobs
    .Where(x => x.WorkOrders.Any(y => trades.Contains(y.Trade)));

我通常处理这些问题的方式是,我看结果必须是什么(一个工作列表)——这意味着我们需要把Where放在第一位,我们必须寻找一个工作被包括的条件。这有点像构造一个SQL查询—事实上,如果您愿意,您可以对大多数LINQ任务使用类似SQL的查询语法。