[英]Issue with Linq2sql query
我在使用以下 linq2sql 查询时遇到问题:
public IEnumerable List(IQueryable<Enquiry> enquiries, Supplier supplier)
{
IEnumerable result = from e in enquiries
let order = supplier==null ? null : e.Orders.Where(f => f.ClientId.Equals(supplier.Id)).FirstOrDefault()
let enquiryUser = e.Client.ClientUsers.First()
select new
{
Id = e.Id,
Name = e.Name,
PublicId = EnquiryMethods.GetPublicId(e.PublicId),
Price = supplier==null ? 0 : EnquiryMethods.GetPrice(e, supplier),
What = e.WorkType.DescriptionText,
Where = e.EnquiryArea.DescriptionText,
Who = e.EnquiryType0.DescriptionText,
When = e.EnquiryTime0.DescriptionText,
PriceRange = e.EnquiryPrice0.DescriptionText,
DisplayPriceRange = e.EnquiryPrice0.Display,
NbrOrders = e.Orders.Count(),
Description = StringUtils.Nl2Br(e.Description??""),
Published = e.EnquiryPublished,
HasPurchased = order!=null,
BuyerFirstName = order!=null ? enquiryUser.FirstName : "",
BuyerLastName = order!=null ? enquiryUser.LastName : "",
BuyerPhone = order!=null ? enquiryUser.Phone : "",
BuyerCellphone = order!=null ? enquiryUser.Cellphone : "",
BuyerEmail = order!=null ? enquiryUser.Email : "",
EnquiryMessage = order!=null ? StringUtils.Nl2Br(order.EnquiryMessage??"") : "",
OrderId = order!=null ? (Guid?)order.Id : null
};
return result;
}
当传递非空供应商时,它可以工作文件,但是当为供应商传递 null 时,我得到“NullReferenceException 未被用户代码处理”。
我的理论是 linq2sql 对 X 不满意? Y:Z 操作似乎 Z (" e.Orders.Where(f => f.ClientId.Equals(supplier.Id)).FirstOrDefault()
") 总是被评估? 我通过supplier==null? Guid.Empty: supplier.Id
supplier==null? Guid.Empty: supplier.Id
但我仍然无法让查询的 rest 工作(订单,= null parst 中断。通过评论除一个之外的所有内容来解决这个问题)。
奇怪的是 e.Orders.Where(f => f.ClientId.Equals(supplier.Id)).FirstOrDefault() 在供应商为非空且查询有效的情况下给出了 null 。 null 和 null 之间有区别吗?
你会怎么写这个?
我不知道这是否可行,但请尝试更改:
let order = supplier==null
? null
: e.Orders.Where(f => f.ClientId.Equals(supplier.Id))
.FirstOrDefault()
至
let order = e.Orders.Where( f => supplier != null
&& f.ClientId.Equals(supplier.Id) )
.FirstOrDefault()
因为你说它在评估第二部分时有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.