2015-09-03 19 views
2

我有这个疑问:LEFT JOIN的LINQ to SQL

public IEnumerable<TimesheetModel> GetTicketsInProgressByUserId(int id) 
{ 
    var query = (from workLogList in DataContext.tblWorkLogs 
       join tickets in DataContext.tblTickets on workLogList.TicketId equals tickets.TicketId 
       join project in DataContext.tblProjects on tickets.ProjectId equals project.ProjectId 
       join states in DataContext.tblWorkflowStates on tickets.Status equals states.StateId 
       where workLogList.AccountId == id 
       group workLogList by workLogList.WorkDate into data 
       select new TimesheetModel 
       { 
        TaskDate = data.Key, 
        TimesheetList = data.Select(x => new TimesheetListModel() 
        { 
         ProjectId = x.tblTicket.tblProject.ProjectId, 
         ProjectName = x.tblTicket.tblProject.Name, 
         TaskDate = x.WorkDate, 
         TimeWorked = x.TimeWorked, 
         Note = x.Note, 
         Task = TaskString(x.tblTicket.TicketId, x.tblTicket.Title, x.TaskTitle) 
        } 
        ).ToList() 
       }); 
    return query.ToList(); 
} 

在此行中我需要使用左连接,因为我还需要考虑数据与worklogList.TicketId == null

join tickets in DataContext.tblTickets on workLogList.TicketId equals tickets.TicketId 

如何使用左加入这个环境?

回答

1

如果您只是在模型中建立关联,那么记得将基数设置为0..1 - *。

然后,你应该能够使用点语法,而不是加入linq语句。

后来补充:

这里是我希望你能与后作出的协会(未经测试ofcourse)结束了例子:

(from workLogList in DataContext.tblWorkLogs 
      //join tickets in DataContext.tblTickets on workLogList.TicketId equals tickets.TicketId 
      //join project in DataContext.tblProjects on tickets.ProjectId equals project.ProjectId 
      //join states in DataContext.tblWorkflowStates on tickets.Status equals states.StateId 
      where workLogList.AccountId == id 
      group workLogList by workLogList.WorkDate into data 
      select new TimesheetModel 
      { 
       TaskDate = data.Key, 
       TimesheetList = data.Select(x => new TimesheetListModel() 
       { 
        ProjectId = x.tblTicket.tblProject.ProjectId, 
        ProjectName = x.tblTicket.tblProject.Name, 
        TaskDate = x.WorkDate, 
        TimeWorked = x.TimeWorked, 
        Note = x.Note, 
        Task = TaskString(x.tblTicket.TicketId, x.tblTicket.Title, x.TaskTitle) 
       } 
       ).ToList() 
      });