2

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();

この問題を解決する構文上のトリックはありますか?

4

1 に答える 1

1

メンバーSelectを取得するために使用してみてください:Date

o.Customer.CustomerOrderRecords
    .Where(x => x.PartNumber == o.PartNumber)
    .OrderByDescending(x => x.Date)
    .Select(x => (DateTime?)x.Date)
    .FirstOrDefault()
于 2011-01-20T12:57:33.677 に答える