-1
好吧,我有點絕望在這裏,需要一些幫助。我對SQL有經驗,但對Linq to SQL和EF沒有經驗。我有一個概念驗證查詢,對數據庫工作正常,但是當我嘗試將它寫入Linq to SQL時,它不會生成我所需要的內容。Linq to SQL多個左外連接
SELECT P.*, C.*, A.*
FROM Parent P
LEFT OUTER JOIN Access A
ON (A.Field1 IS NULL OR A.Field1 = P.Field1)
AND (A.Field2 IS NULL OR A.Field2 = P.Field2)
AND (A.Field3 IS NULL OR A.Field3 = P.Field3)
AND A.AccessId = 123
LEFT OUTER JOIN Child ON
C.Id = P.Id
AND A.HasAccess = 1
請注意,第一外的最後一行加入: 和A.AccessId = 123
這是必要的。我必須能夠在這裏插入一個值,而不是在其他地方。
還要注意最後一個外的最後一行加入: 和A.HasAccess = 1
還需要控制誰可以看到這些數據。
最後,linq看起來像這樣。請理解這是從真實交易中抽象出來的,所以我可能會犯一些錯誤。我無法在此發佈實際查詢。
from p in db.Parent
join a in db.Access
on 123 equals a.AccessId into a1
from a2 in a1.Where(
w => (!w.Field1.HasValue || w.Field1 == p.Field1)
&& (!w.Field2.HasValue || w.Field2 == p.Field2)
&& (!w.Field3.HasValue || w.Field3 == p.Field3)
).DefaultIfEmpty()
join c in db.Child on p.Id equals c.Id into c1
from c2 in c1.Where(
w => c.HasAccess.HasValue && c.HasAccess.Value
).DefaultIfEmpty()
select new { ... stuff ... }
[進一步編輯以反映SO上其他地方的答案。男人,這東西不直觀...:/]
當然,這造成的查詢是不必要的大,並且,由於上述原因,我不能在這裏發佈它。所以,如果有人能幫助至少接近概念性的查詢,那將不勝感激。