5

在 MVC4 项目中,首先使用代码,我有以下内容:

public class Course 
{
   public string CourseId { get; set; }
   public string Name { get; set; }
   public bool IsActive { get; set; }

   public virtual Categories ICollection<Category> { get; set; }

   public Course()
   {
      Categories = new HashSet<Category>();
   }
}

public class Category
{
   public string CategoryId { get; set; }
   public string Name { get; set; }

   public virtual Courses ICollection<Course> { get; set; }

   public Category()
   {
      Courses = new HashSet<Course>();
   }
}

Code First 然后正确地为这个关系创建一个额外的表,因为它是多对多的。

我的问题是当我需要一个包含活动课程(IsActive==true)的类别列表时。例如,这在这里是不可能的:

var categories = db.Categories.Where(x => x.Courses.Where(y => y.IsActive)).ToList();

任何输入如何获得仅包含活动课程的类别列表?

谢谢!

4

1 回答 1

6

此查询将返回至少有一个活动课程的所有类别:

var categories = db.Categories
    .Where(x => x.Courses.Any(y => y.IsActive))
    .ToList();

此查询将返回其课程全部处于活动状态的所有类别。例如,如果一个类别有两门课程并且其中一门课程处于非活动状态,则该类别将从查询中排除:

var categories = db.Categories
    .Where(x => x.Courses.All(y => y.IsActive))
    .ToList();
于 2013-04-23T04:13:03.333 回答