메서드/유창한 구문을 사용하여 Linq에서이 SQL 문에 해당하는 것이 필요합니다.왼쪽 변환 SQL을 메소드로 변환 구문 Linq
SELECT u.[UserId], s.[UserId], d.[UserId]
FROM dbo.[Attachment] z
INNER JOIN dbo.[Activity] a ON z.[ActivityId] = a.[ActivityId]
INNER JOIN dbo.[Case] c ON a.[CaseId] = c.[CaseId]
INNER JOIN dbo.[CaseUser] x ON c.[CaseId] = x.[CaseId]
INNER JOIN dbo.[User] u ON x.[UserId] = u.[UserId]
LEFT OUTER JOIN dbo.[User] s ON u.[SupervisorId] = s.[UserId]
LEFT OUTER JOIN dbo.[User] d ON s.[SupervisorId] = d.[UserId]
WHERE u.[UserId] = @x OR s.[UserId] = @x OR d.[UserId] = @x
또한, 나는 내가 System.Linq.Expressions.Expression 객체를 반환해야합니다 맥락에서 그것을 사용할 수 있습니다. 예를 들어, 기존의 간단한 코드의 예는 다음과 같습니다 나는 부울로 평가 메서드 구문을 사용하여 조인 왼쪽으로 난처한 상황에 빠진
public override Expression<Func<Attachment, bool>> MatchingCriteria
{
get { return a => a.Activity.Case.CaseUsers.Any(x => (x.User.Id == this.id)); }
}
. 다음과 같은 방법을 사용하여
return a => a.Activity.Case.CaseUsers
.Where(cu => cu.User.Id == this.id ||
(cu.User.Supervisor != null &&
cu.User.Supervisor.Id == this.Id) ||
(cu.User.Supervisor != null &&
cu.User.Supervisor.Supervisor != null &&
cu.User.Supervisor.Supervisor.Id == this.Id));
참고 조인 따라서, 올바른 사용자가 반환되지 않습니다. – Polity
글쎄, 나는 어디 까지나 사용자 체인을 따라 UserId가 존재하는지 테스트하고 있기 때문에 WHERE를 ANY로 바꿨다. 그것은 효과가있는 것처럼 보이지만 더 많이 테스트 할 것입니다. 머리를 가져 주셔서 감사합니다. – alphadogg
SelectMany 또는 Join을 사용하여이 작업을 수행하는 방법에 대해 궁금합니다. – alphadogg