我有一张食谱表,里面有相关的成分表 在一对多的基础上。
如何选择使用Linq成分 有一个ingredientName列,它应该包含 指定的单词。
这就是我的尝试。
IQueryable<OurRecipes.Domain.Linq2Sql.Recipe> recipes = _dbctx.Recipes.AsQueryable();
foreach (string word in searchdata.Keywords)
{
recipes = recipes.Where(r => r.RecipeTitle.Contains(word));
recipes = recipes.Where(r => r.Ingredients.Where(i => i.IngredientName.Contains(word)));
}
我无法将类型'etc'转换为bool错误。
任何想法 马尔科姆
答案 0 :(得分:2)
错误在于:
recipes = recipes.Where(r => r.Ingredients.Where(i => i.IngredientName.Contains(word)));
Where
内的条件必须返回一个布尔值,在这种情况下,r.Ingredients.Where(i => i.IngredientName.Contains(word))
不会返回布尔值,因此会返回错误。
这是解决问题的方法:
recipes = recipes.Where(i => i.Ingredients.Any(row=>row.IngredientName.Contains(word)));
答案 1 :(得分:1)
r.Ingredients.Where(i => i.IngredientName.Contains(word)));
替换为
r.Ingredients.Any(i => i.IngredientName.Contains(word)));
顺便说一句,我更喜欢SQL语法,因为它更自然。同样的:
from r in _dbctx.Recipes
where r.Ingredients.Any(i => i.IngredientName.Contains(word)));
select r;
这将选择所有包含名称的成分包含单词的收件人。