1

我有一系列成分 ID,我需要找到所有包含所有成分的食谱,而不是一种或任何成分。

我试过这样的事情:

var query = (from ri in db.RecipesIngredients
                     where SelectedIDs.Contains(ri.IngredientId)
                     select ri.RecipeId).Distinct();

这充当:获取包含 id1 或 id2 或 id3 等的食谱。我希望它是:获取包含 id1 和 id2 和 id3 等的食谱。

这可能吗?

4

2 回答 2

4

你很接近:

var query = (from r in db.Recipes
                     where SelectedIDs.All(i => r.Ingredients.Any(ri => ri.IngredientId == i))
                     select r.RecipeId).Distinct();

翻译为

“给我所有的食谱,其中所有成分SelectedIDs都在该食谱的成分列表中。”

于 2013-06-24T21:52:24.347 回答
3

怀疑您实际上想要所有不包含任何未选择成分的食谱,在这种情况下您可以使用:

var query = db.RecipesIngredients
              .Except(db.RecipeIngredients
                        .Where(x => SelectedIDs.Contains(x.IngredientId)))
              .Select(ri => ri.RecipeId);

我相信这是合乎逻辑的——它是否转化为 SQL 是另一回事。

如果您确实想要一份包含所有选定成分(但也可能包括其他未选定成分)的食谱,那么 D Stanley 的答案可能就是您所追求的。

于 2013-06-24T21:52:29.620 回答