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