2013-06-24 115 views
1

我有一个成分ID的数组,我需要找到所有食谱包含所有成分在一起,而不是一个或任何成分。如何选择与列表中的所有ID匹配的所有对象?

我想是这样的:

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

这为行为:获得食谱包含ID1或ID2或ID3等。我希望它是:得到含有ID1和ID2和ID3等食谱。

这可能吗?

+0

你有餐桌餐桌食谱吗? – nerdybeardo

+0

你是否需要配方来包含*所有*选定的成分 - 或只是*不包括任何未选择的成分? –

+0

是的,有一个食谱表,我需要得到的食谱,包括所有选定的成分 – Yasmine

回答

4

你接近:

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

译为

“给我所有的地方都在SelectedIDs的成分在成分的那几招名单的食谱。”

+0

好吧,它的工作,但我不明白你在这里做了什么,你可以请解释给我吗? – Yasmine

+0

添加了翻译。 –

+0

感谢您的帮助。 – Yasmine

3

怀疑你真正想要的所有不包含任何未选择的成分配方,在这种情况下,你可以使用:

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

我相信,让逻辑意义 - 无论其转换成SQL与否是另一回事。

如果你真的想要一个食谱,其中包括所有选定的成分(但也可能包括其他未经选择的成分),然后D斯坦利的答案可能是你后。

+0

是的我想要所有包含所有选定配料的配方,也可能包含其他未经选择的配料。 – Yasmine

相关问题