2012-08-14 3 views
0

EF에서 필요한 행을 얻는 방법을 모르겠습니다. SQL에서는 이런 모양 일 :EntityFramework - userId가 일치하는 다른 테이블의 IDS와 일치하는 행을 얻는 방법?

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

을하지만 어떻게 일치하는 조리법을 모두받을 수 있나요 :

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

는이 같은 사용자 ID와 일치하는 userfavorites을 얻을하는 방법을 알고 그 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 

또는 당신은 당신이 그들에게 질문

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

의 관계를 설정해야 가정, 탐색 속성 람다 구문을 사용할 수 있습니다 물론 쿼리 구문은 익명 대리자를 사용하는 확장 메서드에 해당하는 호출로 컴파일되는 언어 기능이기 때문에 첫 번째 섹션에서 설명한 것과 동일한 람다 구문을 사용하여 실제 쿼리를 구성 할 수 있지만 에 읽을 시간이 조금 더 필요합니다.

0

방법에 대해 :

이 UserFavorites을 의미
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); 

조리법 및 사용자

Recipes >- UserFavorites -< Users 
사이의 교차 테이블입니다
관련 문제