2012-08-14 27 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 
之間的交叉表
相關問題