2015-09-03 131 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() 
      });