Microsoft에서이 연산자의 순서를 변경 한 이유는 무엇입니까? Microsoft는 select-from-where
을 사용하지 않고이 순서를 from-where-select
으로 변경합니다. 왜? VS에서 더 나은 인텔리 센스 만 있습니까?LINQ에서 select-from-where의 순서가 변경 되었습니까? 그 이유는 무엇입니까?
답변
다른 언급했듯이 IntelliSense를 가능하게하고 작업이 실제로 수행 된 것과 동일한 순서로 쿼리를 읽습니다. 먼저 컬렉션을 가져온 다음 필터링 한 다음 필터링 된 결과를 투영합니다.
세 번째 이유는이 순서가 범위 지정 규칙을보다 합리적으로 만듭니다. C#에서는 "왼쪽으로 흘러가는"새로운 범위를 소개하지 않는다는 것을 알 수 있습니다. SQL에서 FROM에 의해 범위로 가져온 물건은 FROM의 왼쪽에 사용됩니다. C# 구문에서는 범위 변수를 명시 적으로 사용해야하므로 변수를 사용하는 코드의 왼쪽에 선언해야합니다. 범위 변수는 쿼리의 다양한 부분에서 범위 내에 있습니다.
범위 지정 규칙에서 이상한 점은 조인 절입니다. 당신이
from c in customers
join o in orders on c.Id equals o.CustomerId
...
을 말할 때 c
변수 범위는 on
과 equals
하지만 o
사이의 범위에 없습니다. 범위는 여전히 오른쪽으로 흐르고 있지만 경우에 따라 여기 저기에서 하위 절을 건너 뛸 수 있습니다.
더 나은 Intellisense를 허용 할뿐만 아니라 실제 작업 순서를 올바르게 반영합니다. 예를 들어 from e in Employees where e.Age > 65 select e.Salary
은 Employees.Where(e => e.Age > 65).Select(e => e.Salary)
으로 다시 작성됩니다.
Select(e => e.Salary).Employees.Where(e => e.Age > 65)
을 쓰는 것은 의미가 없습니다.
LINQ는 데이터베이스 관련 작업뿐만 아니라 일반적인 쿼리 및 메모리 내 데이터의 투영을위한 것입니다. 또한 LINQ 쿼리 식 구문이 구문 식 설탕이라는 람다 식과 확장 메서드를 고려하십시오.
var query = from foo in foos
where foo.Bar == "Blah"
select foo.Id;
어쨌든
var query = foos.Where(foo => foo.Bar == "Blah").Select(foo => foo.Id);
기존 쿼리 식의 구문은 람다/확장 구문에 가까운
, 컴파일러는 후자에 전자를 번역되어가 맨 처음에하는 일 중의 하나에 대한 문법 설탕입니다. 실제로 일어나는 일의 순서를 더 잘 설명합니다.
- 1. 서브 쿼리에서 "id"의 순서가 변경 되었습니까?
- 2. sql resultset 순서가 정의 되었습니까?
- 3. 메서드 호출 순서가 잘못 되었습니까?
- 4. 자원 관리 순서가 중요한 이유는 무엇입니까?
- 5. FxCop을 사용해야합니까? 그 이유는 무엇입니까?
- 6. POINTER_32 - 무엇이며, 그 이유는 무엇입니까?
- 7. Linq에서 SQL로 웹 서비스를 사용하는 이유는 무엇입니까?
- 8. 하나만 가져가는 이유는 무엇입니까? Linq에서 XML로 C#
- 9. CSVDE 내보내기 파일 열 순서가 잘못 되었습니까?
- 10. MATLAB : 필드 이름의 순서가 정의 되었습니까?
- 11. 활동이 변경 되었습니까?
- 12. HTTP 응답이 변경 되었습니까?
- 13. Facebook.php 변경 되었습니까?
- 14. 위도와 경도가 변경 되었습니까?
- 15. 왜 포인터가 변경 되었습니까?
- 16. IOException - 그 이유는 모르겠습니까?
- 17. 웹 서비스가 비동기 적으로 호출되는 이유는 무엇입니까? 그 이유는 무엇입니까?
- 18. MFMailComposeViewController 제목이 변경 되었습니까?
- 19. WPF 이벤트 속성이 변경 되었습니까?
- 20. 행렬 곱셈 알고리즘의 루프 순서가 성능에 영향을주는 이유는 무엇입니까?
- 21. os.path.basename은 URL과 함께 작동합니다. 그 이유는 무엇입니까?
- 22. 어느 것이 더 빠르며 그 이유는 무엇입니까?
- 23. 좋은 UML 레퍼런스와 그 이유는 무엇입니까?
- 24. select에 어떤 색인이 사용되며 그 이유는 무엇입니까?
- 25. Django에서 사용하는 RDBMS는 무엇이며 그 이유는 무엇입니까?
- 26. Jasper는 항상 내용이 없음을보고하며 그 이유는 무엇입니까?
- 27. 데이터 읽기가 작동하지 않지만 그 이유는 무엇입니까?
- 28. jQuery는 페이지를 두 번로드하지만 그 이유는 무엇입니까?
- 29. IE - 중심에 있지 않지만 그 이유는 무엇입니까?
- 30. 다양한 htaccess 리디렉션 방법과 그 이유는 무엇입니까?
나는 어제이 사실을 실제로 생각하고있었습니다. –