繁体   English   中英

Linq2sql 查询的问题

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM