3

レシピのテーブルとレシピのカテゴリのテーブルがあります。別の表にさまざまな種類のカテゴリがあります。カテゴリにはオプションのパラメーターがあり、テーブルと 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
             };

カテゴリの1 つのタイプ( courseId または NutritionStyleId または none (NutritionStyleId と courseId == 0 の場合) のみ)でのみ選択できます。問題は、nutritionStyleId と courseId が 0 の場合、選択によってすべてレシピが返されますが、その数で乗算されます。 categoryTypeIdは RECIPE CATEGORIES テーブルにあるため、1 つのレシピに複数の categoryType が指定されている場合、私の選択は間違っています。

では、どうすれば条件付き結合などを作成できるので、recipeCategory で検索したくない場合、重複はありません (タイトルまたはレシピ ID の重複)。

シナリオは、nutritionStyleId OR courseId OR nothing (すべてのレシピを返す)で検索できることです。

4

1 に答える 1