レシピのテーブルとレシピのカテゴリのテーブルがあります。別の表にさまざまな種類のカテゴリがあります。カテゴリにはオプションのパラメーターがあり、テーブルと 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 (すべてのレシピを返す)で検索できることです。