我有一系列成分ID,我需要找到所有含有所有成分的配方,而不是一种或任何成分。
我试过这样的事情:
var query = (from ri in db.RecipesIngredients
where SelectedIDs.Contains(ri.IngredientId)
select ri.RecipeId).Distinct();
这充当:获取包含id1或id2或id3等的食谱。我希望它是:获取包含id1和id2以及id3等的食谱。
这可能吗?
答案 0 :(得分:4)
你很亲密:
var query = (from r in db.Recipes
where SelectedIDs.All(i => r.Ingredients.Any(ri => ri.IngredientId == i))
select r.RecipeId).Distinct();
翻译为
“给我所有的食谱,SelectedIDs
中的所有成分都在食谱的成分列表中。”
答案 1 :(得分:3)
我怀疑您实际上想要所有不包含任何未选择成分的食谱,在这种情况下您可能会使用:
var query = db.RecipesIngredients
.Except(db.RecipeIngredients
.Where(x => SelectedIDs.Contains(x.IngredientId)))
.Select(ri => ri.RecipeId);
我相信这会使逻辑有意义 - 无论它是否转换为SQL都是另一回事。
如果你真的做想要一份包含所有选定成分的配方(但也可能包括其他未经选择的成分),那么D Stanley的回答可能就是你所追求的。