2012-07-17 15 views
5

Birden çok birleştirme içinde bir sol dış birleştirme için Linq sözdizimini belirlerken sorun yaşıyorum. RunLogEntry Tablosunda bir sol birleştirme yapmak istiyorum, bu yüzden bu tablodan ve ayrıca tüm Hizmet Girişlerinden eşleşen kayıtlar aldım.Linq left join sözdizimi düzeltmesi gerekiyor

Bazılarınız snytax'ımı düzeltebilir mi?

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 .... denemek – MikeTWebb

+0

'se.RunLogEntryID üzerinde db.RunLogEntry içinde r katılmak sol r.ID eşittir' @MikeTWebb - Linq'de doğrudan sol birleştirme sözdizimi yoktur. –

+0

@D Stanley .... bu bağlantıyı kontrol edin http://codingsense.wordpress.com/2009/03/08/left-join-right-join-using-linq/ Yanlış anlaşıldım mı? – MikeTWebb

cevap

5

bir sol gerçekleştirmek için r üzerine .DefaultIfEmpty yöntemi kullanın katılmak:

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, Çözümünüz işe yarıyor, ben de bir çözüm buldum ama seninkiler daha iyi görünüyor – user1475788

+0

Sanırım yanlış bir şey gönderiyorum asıl soruda, tüm servis girişlerini runlog giriş tablosundaki eşleşmeleri olan servis girişleriyle birlikte almak istiyorum. Yukarıdakilerde orada olmaması gereken kayıtları alıyorum. – user1475788

+0

Cevabımı düzenledim. Bu size doğru sonuçları verir mi bakın. –