2011-02-03 5 views
0

Я пытаюсь выяснить способ объединения этих двух запросов LINQ. Первый создает список праздничных клиентов, а второй - отменяет список на основе адреса электронной почты.Объединение запросов 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, то он будет выполнен как один оператор (если возможно) в отношении базы данных.

+0

Так действительно, чтобы вещи были достаточно простыми и удобочитаемыми, чтобы идти с несколькими запросами? – FloatLeft

+0

@FloatLeft yep, но я всегда проверяю свои запросы в Linq pad, иногда Linq2SQL генерирует множество операторов sql, если вы не исключаете его. – Magnus

+0

Linq имеет отложенные и незащищенные операторы. Пока вы не используете оператор nondferred, запрос не будет выполняться до перечисления. .First() - это непересекающийся оператор, который будет выполняться в этой точке. – mark123

Смежные вопросы