2009-11-18 2 views
2

두 코드 샘플 중 어느 것이 더 효율적인지 (또는 두 무시할 수있는 차이점은 무엇입니까?) 궁금합니다.If 문 또는 For Each 루프가있는 Where 확장명?

For Each apple in AppleController.GetRedApples().Where(Function(a) PriceController.OnSale(a)) 
    'do something 
Next 

또는

For Each apple in AppleController.GetRedApples() 
    If PriceController.OnSale(apple) Then 
     'do something 
    End If 
Next 

감사합니다! 첫 번째 부분이 될 수있는 전체 IDE에서 한 줄을

Dim applesOnSale = AppleController.GetRedApples() _ 
            .Where(Function(a) PriceController.OnSale(a)) 
For Each apple in applesOnSale 
    'do something 
Next 

을 - 또는 당신은이 같은 VB 쿼리 식 사용할 수 있습니다 :

답변

2

의 차이는 무시할 수이고, 두 번째 코드는 훨씬 더 읽을 수 있습니다, 그래서 당신은 아마 당신이 원하는 경우 하나

+0

가독성에 대한 흥미로운 점은 항상 VB.NET이 왜 개선되지 않았는지 궁금해했습니다. LINQ가 발생하면 C#과 VB 사이의 가독성 차이가 커지며 VB 코드 작성자에게는 커다란 책임이되었습니다. – Abel

2

나는 개인적으로 그것을 밖으로 분리 할

Dim applesOnSale = From apple in AppleController.GetRedApples() _ 
        Where PriceController.OnSale(apple) 

For Each apple in applesOnSale 
    'do something 
Next 

이를 개인적으로 가독성 측면에서 유용하다고 생각하는 "항목으로 무엇을하고 싶은지"에서 "관심있는 항목"을 분리합니다. GetRedApplesDataContext를 SQL 위해 LINQ에서 테이블을 반환하는 경우, 예를 들어, SQL에 Where 절 번역하려고합니다 - - 작동하지 않습니다 어떤 상황에서 Where 그러나, 작동하지 않을 수

참고.

LINQ to Objects를 사용한다고 가정하면 할당은 실제로 루핑을 수행하지 않으며 쿼리를 설정합니다. "Where"절은 쿼리를 반복하면서 각 항목에 대해서만 평가됩니다.

+0

+1 : '흥미로운 것'과 '그걸로 무엇을 할 것인가'를 구분하는 것이 내 대답이기도합니다. – cfern

0

성능이 때문에 나는 더 읽기 쉬운 접근을 위해 갈 것, 거의 동일해야합니다 :

var applesOnSale = from apple in AppleController.GetRedApples() 
        where PriceController.OnSale(apple) 
        select apple; 

foreach(var apple in applesOnSale) 
{ 
    //do stuff 
} 

이 당신의 두 번째 옵션과 동일하지만, 터치 더 읽을 수 있습니다.

+0

원래 질문이 VB.NET에 있다는 것을 알았으므로 vb.net으로 이식하기를 원하지 않습니다. (구문에 정통한 사람이 아니기 때문에)이 작업을 수행 할 수 있다고 확신합니다. – Gord

+0

이 경우에는 쿼리 식을 실제로 사용하지 않을 것입니다. "선택"을 사용하도록 강요 당하면 Where를 직접 호출하는 것보다 "푹신 푹신한"결과를 얻게됩니다. 그러나 VB에서 쿼리는 select 절이 필요하지 않으므로 VB에서는 쿼리식이 아마도 더 좋습니다. –