我目前正在使用 LINQ 和 Entity Framework 5.0 编写一个基于 Web 的“配方”应用程序。我一直在努力处理这个查询,所以非常感谢任何帮助!
将有一个搜索功能,用户可以在其中输入他们希望配方结果匹配的成分列表。我需要找到所有食谱,其中相关的成分集合(名称属性)包含字符串列表(用户搜索词)中每条记录的文本。例如,考虑以下两个配方:
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();
感谢您的帮助!