2014-11-07 2 views
0

У меня есть SQL-запрос, как показано ниже левой присоединиться LINQ к объектам нулевых ошибок

 select * from Attachments a 
    left join UserTickets ut 
    on 
    ut.Id=a.UserTicketId 
    left join Tickets t 
    on 
    t.Id=ut.TicketId 
    where a.ItemKey='abcd' 

его возвращение правильный результат в SQL-сервере, но когда я пытаюсь в LINQ к объектам в моем MVC проекта как ниже

 
var attachmentDetails = (from a in AttachmentsService.FindAllAttachments().Attachments 
           join ut in UserTicketsService.FindAllUserTickets().UserTickets on a.UserTicketId equals ut.Id into aut 
           from ut in aut.DefaultIfEmpty() 
           join t in TicketsService.FindAllTickets().Tickets on ut.TicketId equals t.Id into utt 
           from t in utt.DefaultIfEmpty() 
           where a.ItemKey.ToUpper() == userName.ToUpper() 
           select new UserTicketsViewModel 
           { 
            AttachmentId = a.Id, 
            FilePath = a.FileName, 
            TicketName=t!=null?t.TicketName:"", 
            FileName = Path.GetFileName(a.FileName), 
            UserId = UserId, 
           }).ToList(); 

его дать мне исключение в «ut.ticketId» .inner excetion шоу «нулевой» .please предположить, что я делаю неправильно

+0

я не знаю, что это разрешено в переименовании, но может ваша попытка переименовать т в utt.DefaultIfEmpty к от ТТ в utt.DefaultIfEmpty, а также переименовать в выберите:! Т = нуль т? .TicketName: "" to tt! = Null? Tt.TicketName: "" ..hope это поможет вам – Monah

+0

Hey Hadi, спасибо за ответ ... но я уже пробовал это не сработает ... –

ответ

0

Я думаю, что проблема в том, что LINQ пытается перевести все на SQL (включая путь .GetFileName). Попробуйте выполнить этот запрос как:

var attachmentDetails = (from a in AttachmentsService.FindAllAttachments().Attachments 
          join ut in UserTicketsService.FindAllUserTickets().UserTickets on a.UserTicketId equals ut.Id into aut 
          from ut in aut.DefaultIfEmpty() 
          join t in TicketsService.FindAllTickets().Tickets on ut.TicketId equals t.Id into utt 
          from t in utt.DefaultIfEmpty() 
          where a.ItemKey.ToUpper() == userName.ToUpper() 
          select new UserTicketsViewModel 
          { 
           AttachmentId = a.Id, 
           FilePath = a.FileName, 
           TicketName=t!=null?t.TicketName:"", 
           FileName = a.FileName, 
           UserId = UserId, 
          }).ToList(); 
foreach (var item in attachmentDetails) 
    item.FileName = Path.GetFileName(item.FileName); 
+0

Привет, спасибо за ответ, но .. Это не из-за (Path.GetFileName). Поскольку ошибка отображается в ut.TicketId, и когда я собираюсь во внутреннее исключение, его show null. –

+0

Я думаю, что проблема с ut.TicketId вызвана условием отсутствия соединения (как подсказывает ниже), но я думаю, что вы будете работать над проблемой, которую я описал тоже – alessandroasm

+0

Спасибо за ваши усилия и время человек ... Я получил ответ, вызванный значениями ut, был нулевым, так как мы получаем ut.TicketId, если ut равно null. У меня проблема и исправлена. –

2

, пожалуйста, попробуйте выполнить запрос ниже.

var attachmentDetails = (from a in AttachmentsService.FindAllAttachments().Attachments 
          join ut in UserTicketsService.FindAllUserTickets().UserTickets on a.UserTicketId==null ? 0 : a.UserTicketId equals ut.Id into aut 
          from ut in aut.DefaultIfEmpty() 
          join t in TicketsService.FindAllTickets().Tickets on ut.TicketId==null ? 0 : ut.TicketId equals t.Id into utt 
          from t in utt.DefaultIfEmpty() 
          where a.ItemKey.ToUpper() == userName.ToUpper() 
          select new UserTicketsViewModel 
          { 
           AttachmentId = a.Id, 
           FilePath = a.FileName, 
           TicketName=t!=null?t.TicketName:"", 
           FileName = Path.GetFileName(a.FileName), 
           UserId = UserId, 
          }).ToList(); 
+0

Эй, было несколько изменений, которые я сделал, так как ut приходит null, поэтому я заменил ut.TicketId == null? 0: ut.TicketId с ut == null? 0: ut.TicketId –

Смежные вопросы