2012-09-09 3 views
4

나는 다음과 같은 쿼리를 가지고 :Linq에 SelectMany 쿼리

이이 Linq에 람다에 기록 할 수있는 방법
DateTime cutoffDate = new DateTime(1997, 1, 1); 

var orders = 
    from c in customers 
    where c.Region == "WA" 
    from o in c.Orders 
    where o.OrderDate >= cutoffDate 
    select new { c.CustomerID, o.OrderID }; 

? BTW, 이것이 SelectMany 쿼리로 알려져 있습니까?

또한 조인을 사용하여 수행 할 수 있습니다. 위와 같이 장단점이 있습니다.

답변

7

예, 이것은 SelectMany입니다. SelectMany을 사용하여 중첩되거나 계층화 된 컬렉션 (이 경우 고객이 고객의 하위 항목을 중첩)을 '단순화'하여 간단한 단일 계층 컬렉션으로 만듭니다.

customers.Where(c => c.Region == "WA") 
    .SelectMany(c => c.Orders) 
    .Where(o => o.Orderdate >= cutoffDate) 
    .Select(x => new { x.OrderID, x.Customer.CustomerID }); 

주문이 고객의 자산 일 경우, 가입을 사용할 필요가 없습니다.

+0

Broadhust - 답변 해 주셔서 감사합니다. SelectMany와 그냥 조인을 함께 사용하면 얻을 수있는 이점이 있습니까? 하나가 다른 것보다 효율적입니까? –

+0

LINQ 공급자에 따라 다릅니다. 'LINQ-to-SQL' 또는'-Objects'를 사용하고 있습니까? 내 질문보기 http://stackoverflow.com/q/7229569/146077 –

+1

일반적으로 LINQ의 규칙은 '무엇이든 사용하는 가장 단순한'것입니다. LINQ는 효율적이기 때문에 LINQ를 사용하지 않습니다. 쓰기 쉽고 읽기 쉽기 때문에 LINQ를 사용합니다. 이 경우 이미 '참조'가있는 항목에 다시 참여하기 때문에 '조인'의 효율성이 떨어질 수 있지만 프로파일을 작성하지 않으면 알 수 없습니다. –