Linq查询相关实体包含数组值的位置

时间:2015-08-26 18:51:31

标签: c# linq

我有一个名为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查询,它会让我拥有WorkOrders的所有工作,这些工作交易都是传递数组。

var trades = new string[] { }

当我真正需要基础工作时,我尝试了类似下面的工作,因为它试图找到工作人员列表。

问题似乎是因为我打电话给选择

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

1 个答案:

答案 0 :(得分:3)

这将有效:

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

我通常解决这些问题的方法是,我看看结果必须是什么(工作清单) - 这意味着我们需要先放置Where,我们必须寻找条件工作要包括在内。这有点像构建SQL查询 - 事实上,如果您愿意,可以使用像query syntax这样的SQL来执行大多数LINQ任务。