0

我在 LINQ 中进行查询时遇到问题。这是 SQL 中非常简单的一个。

这是我的表:

数据库图

这是我要转换为 LINQ 的查询:

SELECT * FROM Recipe WHERE IDRecipe IN ( 
                    SELECT IDRecipe FROM RecipeTag 
                        INNER JOIN Tag ON Tag.IDTag = RecipeTag.IDTag  
                    WHERE Name LIKE '%{0}%') 

这是我尝试过的,但问题是奇怪的是,表RecipeTag 在上下文中不存在。它似乎在食谱中,但是当我做 db.Recipes.RecipeTag 它不存在...

var recipeTag = from rt in db.RecipeTag
                join tg in db.Tags on rt.IDTag equals tg.IDTag
                where tg.Name.Contains(str)
                select rt.IDRecipe;

IEnumerable<Recipe> recipesTemp3 = (from recipe in db.Recipes
                                    where recipeTag.Contains(recipe.IDRecipe)
                                    select recipe).ToList();

我对 LINQ 完全陌生,如果这是一个非常基本的问题,我很抱歉,但我找不到任何答案!

谢谢

4

3 回答 3

2

LINQ 将多对多关系转换为每个外部表上的集合属性。
你根本不需要中间的桌子。

反而,

from recipe in db.Recipes
where recipe.RecipeTags.Any(t => t.Name.Contains(str))
select recipe

或者,更简单地说:

from tag in db.RecipeTags
where tag.Name.Contains(str)
from recipe in tag.Recipes
select recipe
于 2013-03-05T23:21:02.663 回答
0
var recipes = db.Recipes.Where(r=>r.RecipeTag.Any(t=>t.Tag.Name.Contains("whatever")).ToList();
于 2013-03-05T23:21:38.823 回答
0

如果我理解正确你想要:

var recipeTags = db.RecipeTags.Where(p => p.Tag.Name.Contains(str)).Select(p => p.Recipe).ToList();
于 2013-03-05T23:21:48.617 回答