使用Linq在许多表上进行选择

时间:2009-11-29 12:47:11

标签: linq

我有一张食谱表,里面有相关的成分表 在一对多的基础上。

如何选择使用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错误。

任何想法 马尔科姆

2 个答案:

答案 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;

这将选择所有包含名称的成分包含单词的收件人。