2010-06-18 6 views
0

이것은 stackoverflow 내 첫 번째 질문이지만 정말 처음 솔루션을 여기에 얻을 수 없습니다. 엔티티 프레임 워크 4에서 다중 조인으로 고민하고 있습니다. 쿼리하기 어려운 세 테이블 (계정, 사용자 및 AccountUsers)이 있습니다.다중 조인 쿼리를 eSql

내가 원하는 것은 계정 작성자를 포함하여 제공된 accountId에 대한 모든 사용자를 얻는 것입니다. 모든 계정 사용자에게 문제는 없지만 AccountUsers 테이블에 추가되지 않았기 때문에 계정 작성자를 얻는 것이 어렵습니다. 아래는 테이블이 어떻게 관련되어 있는지를 간략히 보여줍니다.

계정

  • 통해 AccountId
  • 사용자 아이디 (계정 크리에이터)
  • ... 다른 열

사용자

  • 사용자 아이디
  • ... 오 엔티티에 THER 열

AccountUsers

  • 통해 AccountId
  • 내가 쿼리가 ESQL로 선호

사용자 아이디,하지만 Linq를 할 것입니다.

저는 여러분이 stackoverflow에서 여러분을 신뢰합니다. 따라서 'Answer'마크를 얻는데 오래 걸리지 않을 것이라는 것을 알고 있습니다.

감사합니다.

답변

0

내가 당신의 질문을 올바르게 읽는다면 당신은 노동 조합에 너무 많이 가입하지 않을 것입니까? esql에 대해 잘 모르겠지만, 다음과 같은 Linq 쿼리가 작동해야한다고 생각합니다.

var users = (from accountUser in db.AccountUsers 
      where accountUser.AccountId == myAccountId 
      select accountUser.UserId) 
      .ToList() 
      .Add((from account in db.Accounts 
        where account.AccountId == myAccountId 
        select account.UserId) 
       .Single()); 

이 게으른 로딩, 당신은 항상 foreachyield return 활용하는 방법을 만들 수 있도록하려면, 어쩌면 그것은 당신이 올바른 방향으로 가고 (또는 나는 완전히 기지에서 벗어나거나없는 것일 수) 얻을 것이다 : 호기심에서

IEnumerable<int> GetAccountUsers(int AccountId) 
{ 
    //return the users 
    foreach(var userId in (from accountUser in db.AccountUsers 
          where accountUser.AccountId == myAccountId 
          select accountUser.UserId)) 
     yield return userId; 

    //return the owner too 
    yield return (from account in db.Accounts 
        where account.AccountId == myAccountId 
        select account.UserId) 
       .Single(); 
} 

는하지만, 이유도 AccountUsers 테이블에 추가하지 주인은?

+0

아마도 제가 필요한 것은 노동 조합입니다. 확실하지 않습니다. 쿼리가 두 번 실행되는 것 같습니다 .ToList() 및 .Single(). 나는 쿼리가 한 번 실행되기를 원한다. union이 할 것이면 나는 그것을 수행 할 것이고, 단지 쿼리 스터디에 능숙하지 않을 것이다. 계정 테이블에 이미 AccountOwner를 나타내는 UserId가 있으므로 소유자는 AccountUsers 테이블에 추가되지 않습니다. – Syma

관련 문제