0

EFで必要な行を取得する方法がわかりません。SQLでは、次のようになります。

SELECT * FROM [Recipes] 
JOIN [UserFavorites] ON [UserFavorites].[RecipeId] = [Recipes].[Id]
WHERE [UserFavorites].[UserId] = @UserId

私は次のようにユーザーIDに一致するuserfavoritesを取得する方法を知っています:

db.UserFavorites.Where(x => x.UserId == userId

しかし、それらのuserfavorites内のrecipeIdsに一致するすべてのレシピを取得するにはどうすればよいですか?

4

2 に答える 2

2

LINQを使用して、クエリを作成することができます。

var recipes = from r in db.Recipes
              join f in db.UserFavorites on r.Id equals f.RecipeId
              where f.UserId = userId
              select r

または、問題のリレーションシップ用に設定されていると仮定して、ナビゲーションプロパティでラムダ構文を使用できます

var recipes = db.Recipes.Where(r => r.UserFavorites.Any(f => f.UserId == userId));

もちろん、同等のラムダ構文を使用して最初のセクションで説明されている実際のクエリを作成できます(クエリ構文は、匿名デリゲートを使用して拡張メソッドへの同等の呼び出しにコンパイルされる言語機能であるため)が、もう少し読みにくくなります。

于 2012-08-14T03:25:29.843 に答える
0

どうですか:

var recipes = context.Recipes
                  .SelectMany(r => r.Users, (r, u) => new { Recipe = r, User = u }
                  .Where(o => o.User.UserId = userId)
                  .Select(o => o.Recipe);

これは、UserFavoritesがレシピとユーザー間の共通テーブルであることを意味します

Recipes >- UserFavorites -< Users
于 2012-08-14T03:41:06.400 に答える