2010-03-08 7 views
1

다음 2 개의 LINQ 쿼리가 있는데 LINQ에 대한 내 머리가 모자라서 아래 두 가지 방법의 차이점은 무엇입니까?2 가지 XML LINQ 쿼리의 차이점은 무엇입니까?

하나의 접근법이 다른 접근법보다 낫다는 상황이 있습니까?

ChequeDocument.Descendants("ERRORS").Where(x=>(string)x.Attribute("D") == "").Count(); 

    (from x in ChequeDocument.Descendants("ERRORS") where 
          (string)x.Attribute("D") == "" 
          select x).Count()) 

답변

2

전혀 차이가 없습니다. 컴파일러는 두 번째 구문을 첫 번째 구문으로 변환합니다 (컴파일 된 어셈블리에서 Reflector로보기). 따라서 어떤 구문이 가장 적합한 지 결정하는 것은 당신에게 달려 있습니다.

3

Darin이 말했듯이 차이는 없습니다. 개인적으로 나는 첫 번째 구문을 선호합니다. 검색어 표현에 하나만있는 where 절이 있기 때문입니다. 첫 번째 구문은 다음과 같이 더 읽기 쉽습니다.

var query = ChequeDocument.Descendants("ERRORS") 
          .Where(x=>(string)x.Attribute("D") == "") 
          .Count(); 

또한 쿼리 식의 특별한 경우를 보여줍니다. 두 번째 구문은 가 처음로 번역입니다 :

var query = ChequeDocument.Descendants("ERRORS") 
          .Where(x=>(string)x.Attribute("D") == "") 
          .Select(x => x) 
          .Count(); 

하지만 컴파일러는 무 조작 Select(x => x)를 제거합니다. 이 없으므로 다른 절이없는 경우이 작업을 수행하므로 from x in y select x은 여전히 ​​y.Select(x => x)이됩니다.

0

저도 마찬가지입니다. 유일한 차이점은 1은 람다 식으로 쓰고, 두 번째는 linq에서 xml으로 쓰는 것입니다.

관련 문제