5

我在确定Linq多个连接中左外连接的语法时遇到问题。我想对RunLogEntry表进行左连接,以便从该表以及所有服务条目中获取匹配的记录。

有人可以纠正我的语法吗?

 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);
4

1 回答 1

5

使用.DefaultIfEmptyon 方法r执行左连接:

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);
于 2012-07-17T21:13:30.530 回答