2013-06-24 61 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

相關問題