簡體   English   中英

在linq中左聯接到實體null錯誤

[英]Left join in linq to entities null error

我有如下的SQL查詢

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 server中返回正確的結果,但是當我在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”處給我例外。內部排除節目“ null”。請提示我在做什么

請嘗試下面的查詢。

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

我認為問題在於LINQ正在嘗試將所有內容轉換為SQL(包括Path.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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM