Linq查询,其中相关实体包含数组中的值 [英] Linq Query where related entity contains value from array

查看:43
本文介绍了Linq查询,其中相关实体包含数组中的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为JobReport的模型,它看起来像这样(简化)

I have a Model called JobReport which looks like this (simplified)

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查询,该查询可以让我获得所有具有工作订单的工作的订单,而这些工作订单的交易位于传递的数组中.

I'd like to run a Linq query which gets me all the Jobs that have WorkOrders that have a trade which is in a passed array.

var trades = new string[] { }

我尝试了以下类似的操作,但当我实际上需要基础工作时,它试图为我提供工作单列表.

I've tried something like the following which doesn't work, as it tries to get me a list of workorders, when I actually need the underlying jobs.

问题似乎是因为我在致电Select

The problem appears to be because I'm calling 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查询-实际上,您可以像查询语法那样使用SQL (如果愿意)用于大多数LINQ任务.

The way I usually tackle these problems is that I look at what the outcome must be (a list of jobs) - that means we need to put the Where first, and we must look for a condition for a job to be included. It's a bit like constructing a SQL query - in fact you can use the SQL like query syntax for most LINQ tasks, if you prefer.

这篇关于Linq查询,其中相关实体包含数组中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆