2011-01-20 12 views
2

私はうまく書き込むために悩んでいるL2Sリポジトリクエリを持っています。それは 連鎖されたlinq-to-sqlクエリ式のヌル値の扱い

_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チェックを行うために二回だけで全体の問合せの連鎖を書くことだ問題を見ることができます...のようになります。

GetAllByFilterIQueryableを返すので、これはインラインで書かれている必要があります(私は思う)。

select文で中間変数を使用しようとしたので、次のようなものがありましたが、コンパイルするようなものは得られませんでした。

​​

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

答えて

1

DateメンバーフェッチするSelectを使用してみてください:

o.Customer.CustomerOrderRecords 
    .Where(x => x.PartNumber == o.PartNumber) 
    .OrderByDescending(x => x.Date) 
    .Select(x => (DateTime?)x.Date) 
    .FirstOrDefault() 
+0

は、なぜ私はそのように書いて考えていませんでしたの!?とても簡単!ありがとう:) – fearofawhackplanet