复杂的LINQ或EF查询

时间:2012-05-29 07:19:10

标签: linq entity-framework linq-to-sql entity-framework-4 linq-to-entities

我有以下3个班级。

工作流程配置包含一个品牌和一个工作流程类型。

我需要linq或EF中的一种方法,它可以获得现有工作流程配置的所有品牌,以及另一种方法,可以让我获得所有品牌的非现有工作流程配置。

我迷失了因为我不知道从哪里开始。

public class Brand
    {
        public int BrandId { get; set; }
        public string Name { get; set; }
    }


  public class WorkflowType
    {
        public int WorkflowTypeId { get; set; }
        public string Name { get; set; }
    }

 public class WorkflowConfiguration
    {
        public int WorkflowConfigurationId { get; set; }
        public WorkflowType WorkflowType { get; set; }
        public Brand Brand { get; set; }
        public virtual ICollection<Approver> Approvers { get; set; }

    }

UPDATE1 以下是我的表格的样子和预期结果

品牌

  1. 奥迪

  2. 大众

  3. 梅赛德斯

  4. WorkflowTYpes

    1. 输入1

    2. 类型2

    3. 输入3

    4. WorkflowConfiguration

      brandid,workflowtype id

      1 ------------ 1

      1 ------------- 2

      List<string> GetBrandsForExistingWorkflowType(string worfklowtype)

      如果我将type1传递给此方法,它应该返回: 奥迪,因为对于type1,奥迪存在于桌面上

      List<string> GetBrandsForNonExistingWorkflowType(string workflowType)

      如果我将type1传递给此方法,它应该返回。 大众汽车和梅赛德斯因为对于1型,这2个品牌都不在关系中。

1 个答案:

答案 0 :(得分:4)

我认为这就是你想要的:

List<string> GetBrandsForExistingWorkflowType(string worfklowtype)
{
    var result = db.WorkflowConfigurations
                 .Where(x => x.WorkflowType.Name == worfklowtype)
                 .Select(x => x.Brand);
    return result;
}

List<string> GetBrandsForNonExistingWorkflowType(string workflowType)
{
    var excluded = GetBrandsForExistingWorkflowType(string worfklowtype);
    var result = db.Brands.Except(excluded);
    return result;
}