メソッド/流暢構文を使用して、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
私は基本的にユーザーチェーンに沿ってUserIdの存在をテストしているので、WHEREをANYに置き換えました。それはうまくいくようですが、もっとテストします。ヘッドアップをありがとう。 – alphadogg
SelectManyまたはJoinを使ってこれがどのように行われるのか、興味があります。 – alphadogg