3

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

表格:

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 时,选择返回我所有食谱,但乘以数量categoryTypeId在 RECIPE CATEGORIES 表中。因此,如果一个食谱指定了多个 categoryType,则我的选择是错误的。

那么如何进行条件连接或其他操作,所以当我不想按recipeCategory 搜索时,不会有任何重复项(重复的标题或recipeId)

场景是我可以通过 NutritionStyleId 或 courseId 或无搜索返回所有食谱)

4

1 回答 1

1

对不起方法语法(它更适合我:))。但这是代码

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 });
于 2013-05-22T12:40:33.770 回答