【问题标题】:Selecting items using LinqtoEntities lambda C#使用 LinqtoEntities lambda C# 选择项目
【发布时间】:2012-12-24 14:19:24
【问题描述】:

我在 Visual Studio 2012 中使用实体框架代码优先技术 这是我的上下文

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

我正在尝试返回所有类别,包括仅使用 C# 中的 Lambda 表达式将 IsCompanyRecipe 标记为 true 的食谱

到目前为止,我已经得到了这个

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

它返回一个包含所有公司食谱的IEnumerable&lt;Recipe&gt; 列表,但我想返回一个IEnumerable&lt;Category&gt; 列表,其中包括IsCompanyRecipe == true 的所有食谱?

【问题讨论】:

    标签: c# .net linq entity-framework lambda


    【解决方案1】:
    var query = (from c in categories
             from r in c.Recipes
             where r.IsCompanyRecipe == true
             select c);
    

    【讨论】:

    • 您不需要将布尔值与真/假进行比较
    • 虽然显式比较有时会增加代码的可读性,例如在这种情况下的例子中,或者在复杂的表达式中
    • 感谢您似乎完成了这项工作。最好像你一样编写查询而不是 Lambda 还是只是个人喜好
    • @dellywheel 只是偏好。我倾向于发现我编写查询的方式比使用 lambda 更容易阅读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多