繁体   English   中英

LINQ选择带有连接和可选位置

[英]LINQ Select with join and optional where

我有带食谱的桌子和带食谱类别的桌子。 另一个表中有不同的类别类型 我有类别的可选参数,我的表和linq select看起来像:

表:

RECIPE
recipeId  title

RECIPE CATEGORIES
recipeCategoryId recipeId categoryId categoryTypeId

var result = from r in context.Recipes
             join c in context.RecipeCategories on r.recipeId equals c.recipeId
             where (nutritionStyleId == 0 || c.categoryId == nutritionStyleId )
             && (courseId == 0 || c.categoryId == courseId)
             select new
             { 
               r.recipeId,
               r.title
             };

您只能按一种类型进行选择按CourseId或NutritionStyleId或无选择 (如果NutritionStyleId和courseId == 0)。问题是当NutritionStyleId和courseId为0时,选择返回所有 配方,乘以数量RECIPE CATEGORIES表中的categoryTypeId ,因此,如果一个配方指定了更多categoryType,则我的选择是错误的。

所以我该如何进行条件连接或其他什么操作,所以当我不想按recipeCategory进行搜索时,将不会有任何重复(标题或菜谱ID重复)

情景是,我可以通过nutritionStyleId courseId 没有(返回所有配方)搜索

很抱歉方法语法(它更适合我:))。 但是这是代码

context.Recipes
.Where(x => x.RecipeCategories.Any(rc => (nutritionStyleId == 0 || rc.categoryId == nutritionStyleId) && (courseId == 0 || rc.categoryId == courseId))
.Select(x => new { x.recipeId, x.title });

编辑:加入翻译:

context.Recipes
.Where(x => x.RecipeCategories.Any(rc => (nutritionStyleId == 0 || rc.categoryId == nutritionStyleId) && (courseId == 0 || rc.categoryId == courseId))
.Select(x => new { x.recipeId, Title = x.Translations.FirstOrDefault(t => t.Language == language).Title });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM