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
したがって、値を受け取ったときにnullチェックを実行するためだけに、クエリチェーン全体を2回記述しなければならないという問題がわかるといいのですが。
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();
この問題を解決する構文上のトリックはありますか?