2012-12-24 140 views
3

選擇項目我使用實體框架代碼第一種方法在Visual Studio 2012 這裏是我的上下文使用LinqtoEntities拉姆達C#

public class BakingWebContext : DbContext 
{ 
     public DbSet<Recipe> Recipes { get; set; } 
     public DbSet<Category> Categories { get; set; } 
} 

我有一個類別類

public class Category 
{ 
     [Key] 
     public int CategoryId { get; set; } 
     [Required] 
     public string Name { get; set; } 
     public string Description { get; set; } 
     public string ImageUrl { get; set; } 

     public virtual ICollection<Recipe> Recipes { get; set; } 

} 

它包含一個虛擬集合食譜

public class Recipe 
{ 
     [Key] 
     public int RecipeId { get; set; } 
     [Required] 
     public string Title { get; set; } 
     public string Description { get; set; } 
     public bool IsCompanyRecipe { get; set; } 
} 

我試圖返回所有的食物gories僅包括有IsCompanyRecipe使用Lambda表達式在C#

到目前爲止,我已經有了這個

var query = categories.Where(c => c.Recipes.Count > 0).SelectMany(r => r.Recipes.Where(re => re.IsCompanyRecipe == true)); 

返回所有的公司食譜,但我的IEnumerable<Recipe>列表標記爲真正食譜想要返回一個IEnumerable<Category>列表,其中包括所有的食譜IsCompanyRecipe == true

回答

5
var query = (from c in categories 
     from r in c.Recipes 
     where r.IsCompanyRecipe == true 
     select c); 
+0

您不需要將布爾值與真/假比較 –

+3

儘管顯式比較有時會增加代碼的可讀性,在這種情況下,或在複雜的表達式 –

+0

Clarity是IMO的關鍵。 –