我需要使用方法/流暢語法在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)); }
}
我通過使用左側計算結果爲布爾方法的語法聯接難倒。
請注意,這不是一個連接,因此,不會返回正確的用戶。 – Polity
嗯,我用ANY替換了WHERE,因爲我正在測試用戶鏈上UserId的存在。它似乎工作,但會測試更多。感謝您的高舉。 – alphadogg
我很好奇,看看如何使用SelectMany或Join來完成這項工作,儘管... – alphadogg