現在、LINQ と Entity Framework 5.0 を使用して Web ベースの「レシピ」アプリケーションを作成しています。私はしばらくこのクエリに苦労してきたので、どんな助けも大歓迎です!
ユーザーがレシピ結果に一致させたい材料のリストを入力できる検索機能があります。関連する成分コレクション (name プロパティ) に、文字列のリスト (ユーザー検索語) 内のすべてのレコードのテキストが含まれているすべてのレシピを見つける必要があります。たとえば、次の 2 つのレシピを考えてみましょう。
Tomato Sauce: Ingredients 'crushed tomatoes', 'basil', 'olive oil'
Tomato Soup: Ingredients 'tomato paste', 'milk', 'herbs
ユーザーが「トマト」と「オイル」という検索語を使用した場合、トマト ソースは返されますが、トマト スープは返されません。
var allRecipes = context.Recipes
.Include(recipeCategory => recipeCategory.Category)
.Include(recipeUser => recipeUser.User);
IQueryable<Recipe> r =
from recipe in allRecipes
let ingredientNames =
(from ingredient in recipe.Ingredients
select ingredient.IngredientName)
from i in ingredientNames
let ingredientsToSearch = i where ingredientList.Contains(i)
where ingredientsToSearch.Count() == ingredientList.Count()
select recipe;
私も試しました:
var list = context.Ingredients.Include(ingredient => ingredient.Recipe)
.Where(il=>ingredientList.All(x=>il.IngredientName.Contains(x)))
.GroupBy(recipe=>recipe.Recipe).AsQueryable();
ご協力ありがとうございました!