2012-07-17 18 views
5

我有問題找出多個連接中左外連接的Linq語法。我想在RunLogEntry Table上進行左連接,因此我得到了與此表匹配的記錄以及所有服務條目。Linq左連接需要的語法校正

有人能糾正我的snytax嗎?

var list = (from se in db.ServiceEntry 
    join u in db.User on se.TechnicianID equals u.ID 
    join s in db.System1 on se.SystemID equals s.ID 
    join r in db.RunLogEntry on se.RunLogEntryID equals r.ID 
    where se.ClosedDate.HasValue == false 
    where se.ClosedDate.HasValue == false 
     && se.Reconciled == false 
    orderby se.ID descending 
    select new ServiceSearchEntry() 
    { 
     ID = se.ID, 
     ServiceDateTime = se.ServiceDateTime, 
     Technician = u.FullName, 
     System = s.SystemFullName, 
     ReasonForFailure = se.ReasonForFailure, 
     RunDate = r.RunDate 
    }) 
    .Skip((page - 1) * PageSize); 
+0

@user ....嘗試 '留在db.RunLogEntry加入R ON se.RunLogEntryID等於r.ID' – MikeTWebb 2012-07-17 20:51:51

+0

@MikeTWebb - Linq中沒有直接的左連接語法。 – 2012-07-17 20:53:02

+0

@D赤柱....看看這個鏈接http://codingsense.wordpress.com/2009/03/08/left-join-right-join-using-linq/我誤會了嗎? – MikeTWebb 2012-07-17 20:54:59

回答

5

使用上r.DefaultIfEmpty方法執行左連接:

var list = (from se in db.ServiceEntry 
    join r in db.RunLogEntry on se.RunLogEntryID equals r.ID into joinRunLogEntry 
    from r2 in joinRunLogEntry.DefaultIfEmpty() 
    join u in db.User on se.TechnicianID equals u.ID 
    join s in db.System1 on se.SystemID equals s.ID 
    where se.ClosedDate.HasValue == false 
    where se.ClosedDate.HasValue == false 
     && se.Reconciled == false 
    orderby se.ID descending 
    select new ServiceSearchEntry() 
    { 
     ID = se.ID, 
     ServiceDateTime = se.ServiceDateTime, 
     Technician = u.FullName, 
     System = s.SystemFullName, 
     ReasonForFailure = se.ReasonForFailure, 
     RunDate = (r2 == null ? (DateTime?)null : r2.RunDate) 
    }) 
    .Skip((page - 1) * PageSize); 
+0

@Stanley,謝謝你的解決方案,我也找到了一個解決方案,但你看起來更好 – user1475788 2012-07-17 21:20:06

+0

我想我發佈了一些錯誤在我原來的問題中,我希望獲得所有服務條目以及那些在runlog條目表中具有匹配的服務條目。在上面我得到的記錄不應該在那裏。 – user1475788 2012-07-17 21:41:41

+0

我編輯了我的答案。看看這是否給你正確的結果。 – 2012-07-17 22:02:16