我有一个 L2S 存储库查询,我正在努力以一种很好的方式编写它。它看起来像...
_orderRepository
.GetAllByFilter(o => o.CustomerId == id)
.Select(o =>
new CustomerOrderRecord
(
o.Id,
o.PartNumber,
o.Date
// ... etc, more order details
/* Here I need the last DateTime? the customer placed
an order for this item, which might be null.
So I end up with the following horrible part of
the query */
o.Customer.CustomerOrderRecords
.Where(x => x.PartNumber == o.PartNumber)
.OrderByDescending(x => x.Date).FirstOrDefault()
== null ? null :
o.Customer.CustomerOrderRecords
.Where(x => x.PartNumber == o.PartNumber)
.OrderByDescending(x => x.Date).First().Date;
)).ToList();
因此,希望您能看到我必须编写整个查询链两次才能在接收LastOrdered
值时进行空检查的问题。
这需要内联编写(我认为),因为GetAllByFilter
返回一个IQueryable
.
我试图在 select 语句中使用一个中间变量,所以我有一些类似下面的东西,但我无法编译类似的东西。
.Select(o =>
new CustomerOrderRecord
(
o.Id,
o.PartNumber,
o.Date
// ... etc, more order details
var last = o.Customer.CustomerOrderRecords
.Where(x => x.PartNumber == o.PartNumber)
.OrderByDescending(x => x.Date).FirstOrDefault()
== null ? null : last.Date;
)).ToList();
是否有可用的语法技巧来解决这个问题?