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 に答える