0

我不确定如何在 EF 中获取我需要的行。在 SQL 中,它看起来像这样:

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

我知道如何获得与用户 ID 匹配的用户收藏夹,如下所示:

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

但是,我如何获得与这些用户收藏中的 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

或者您可以将 lambda 语法与导航属性一起使用,假设您已为相关关系设置了它们

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

当然,您可以使用等效的 lambda 语法构造第一节中描述的实际查询(因为查询语法只是一种语言功能,可以编译为使用匿名委托对扩展方法的等效调用),但这往往阅读起来有点困难。

于 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 和 Users 之间的交集表

Recipes >- UserFavorites -< Users
于 2012-08-14T03:41:06.400 回答