2011-02-03 4 views
0

これらの2つのLINQクエリを組み合わせる方法を理解しようとしています。最初のものは休日の顧客のリストを作成し、2番目のものは電子メールアドレスに基づいてリストを削除します。LINQクエリを組み合わせて一意のレコードを取得する

これらを組み合わせる最も簡潔な方法は何ですか?

 var allNonBuyers = (from a in allCustomers 
          where !(from q in db.Quotes 
            where q.CreationDate > DateTime.Now.AddMinutes(duration) 
            join p in db.Passengers on q.QuoteGUID equals p.QuoteGUID 
            where q.PolicyNumber != null 
            select p.EmailAddress).Contains(a.EmailAddress) 
          select new { a.QuoteGUID, a.Title, a.FirstName, a.LastName, a.EmailAddress, a.Telephone }); 

     var distinctNonBuyers = from buyer in allNonBuyers 
           group buyer by buyer.EmailAddress 
            into gbuyer 
            select gbuyer.First(); 

答えて

1

通常、LINQの実行が遅れているため、結果を求めるときにすべてが組み合わされる必要はありません。これがLinq-To-Sqlの場合、データベースに対して可能な場合は1つのステートメントとして実行されます。

+0

だから、実際には、複数のクエリを実行するには、かなりシンプルで読みやすくするために、 – FloatLeft

+0

@FloatLeftしかし、私はいつもLinqパッドで私のクエリをテストしていますが、Linq2SQLはそれを除いていないときに多くのSQL文を生成することがあります。 – Magnus

+0

Linqには、遅延演算子と非演算子があります。不承認の演算子を使用していない限り、クエリは列挙されるまで実行されません。 .First()は未譲渡の演算子なので、その時点で実行されます。 – mark123

関連する問題