实体框架 - 如何从用户Id匹配的另一个表中获取与任何IDS匹配的行?

时间:2012-08-14 03:18:40

标签: entity-framework

我不确定如何在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匹配的所有食谱?

2 个答案:

答案 0 :(得分: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语法构造第一部分中描述的实际查询(因为查询语法只是一种语言功能,可编译为使用匿名委托对扩展方法的等效调用),但这往往有点难以阅读。

答案 1 :(得分: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