2013-04-23 63 views
3

在MVC4項目,使用代碼首先,我有以下幾點:的LINQ與where子句中許多一對多EF代碼優先對象

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

代碼第一次那麼正確此關係創建一個額外的表,因爲它是多對多的。

我的問題是當我需要活動課程的類別列表(IsActive == true)。這裏,例如,這是不可能的:

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

任何輸入如何獲得只有活動課程的類別列表?

謝謝!

回答

4

此查詢將返回至少有一個當然是積極的所有類別:

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(); 
+0

試了一下,它包括所有的那些地方IsActive是假的爲好。 – Anders 2013-04-23 04:24:30

+0

該查詢將包含一個至少有一個活動課程的類別。如果至少有一個不活動的課程,您是否希望排除一個類別? – 2013-04-23 04:38:16

+0

不,我想查看所有有課程的類別,但不包括不活動的課程。 – Anders 2013-04-23 12:20:44