2011-02-03 2 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 네,하지만 항상 Linq 패드에서 내 쿼리를 테스트합니다. 때로는 Linq2SQL이 많은 SQL 문을 생성합니다. – Magnus

+0

Linq에는 지연된 연산자와 불이행 연산자가 있습니다. nondeferred 연산자를 사용하지 않는 한 쿼리는 열거 될 때까지 실행되지 않습니다. .First()는 비연 산자이므로 그 시점에 실행됩니다. – mark123