2013-02-11 4 views
0

사용자 테이블과 메시지 테이블이 있습니다. Messages 테이블에는 Users 테이블에 대한 두 개의 외래 키 참조 인 "To_Id"와 "From_Id"가 User.Id를 가리 킵니다. 나는 메시지를 리턴하고 To와 From 관계로 표현 된 User로부터 Username 프로퍼티를 얻을 수있는 쿼리를 작성하고자한다. 이 쿼리의Simple.Data 한 방향 테이블에 두 번 참여하십시오.

dynamic sender; 
dynamic recipient; 
var messages= db.Messages.All(db.Messages.To_Id == currentUser.Id || db.Messages.From_Id == currentUser.Id) 
    .Join(db.Users.As("Sender"), out sender).On(sender.Id == db.Messages.From_Id) 
    .Join(db.Users.As("Recipient"), out recipient).On(recipient.Id == db.Messages.To_Id) 
return messages; 

결과는 올바른 메시지 카운트 날을 제공하지만, To_Id 및 From_Id 열은 사라지고 보낸 사람과받는 사람 열 이름은 표시되지 않습니다 : 여기에 지금까지 무슨이다. 나는 문서를보고, github 및이 질문에 대한 소스 : Simple.Data - how to bi-drectionally join on the same table twice 아직 성공하지 않고. 어떤 아이디어?

답변

1

나는 당신의 To_Id 및 From_Id 컬럼에 발생 될 수 있는지 모르겠지만, 당신이 원하는 경우 사용자 행을, 당신이 조항으로 추가 할 필요가 열망 -로드 : 누락에 대해서는

dynamic sender; 
dynamic recipient; 
var messages= db.Messages.All(db.Messages.To_Id == currentUser.Id || db.Messages.From_Id == currentUser.Id) 
    .Join(db.Users.As("Sender"), out sender).On(sender.Id == db.Messages.From_Id) 
    .Join(db.Users.As("Recipient"), out recipient).On(recipient.Id == db.Messages.To_Id) 
    .With(sender) 
    .With(recipient); 
return messages; 

열, 쿼리에 대해 실행중인 SQL을 보려면 Trace를 살펴 보았습니까? 그것은 약간의 빛을 비춰주는 데 도움이 될 수 있습니다.

관련 문제