[英]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.