2012-08-14 75 views
0

我不知道如何获得我需要在EF中的行。在SQL它会是这个样子:EntityFramework - 如何获取与userId匹配的另一个表中的任何IDS匹配的行?

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

您可以使用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语法来构造第一部分中描述的实际查询(因为查询语法只是编译到使用匿名代理的扩展方法的等效调用的语言功能),但这往往至有点难以阅读。

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 
之间的交叉表
相关问题