LINQ : 점 표기법과 쿼리 식
일반적으로 LINQ를 사용하기 시작했습니다 (지금까지 toXML 및 toSQL). 나는 때때로 동일한 결과를 얻는 두 가지 이상의 방법이 있음을 보았다. 내가 이해하는 한이 간단한 예를 들어 두 가지 모두 똑같은 결과를 반환합니다.
SomeDataContext dc = new SomeDataContext();
var queue = from q in dc.SomeTable
where q.SomeDate <= DateTime.Now && q.Locked != true
orderby (q.Priority, q.TimeCreated)
select q;
var queue2 = dc.SomeTable
.Where( q => q.SomeDate <= DateTime.Now && q.Locked != true )
.OrderBy(q => q.Priority)
.ThenBy(q => q.TimeCreated);
아이디어는 같은 것을 표현하는 두 가지 방법이 있다는 것입니다. 첫 번째 방법에는 몇 가지 제한 사항이 있고 "점 표기법"이 더 완벽하다는 것을 알고 있지만 그 외에 다른 이점이 있습니까?
"점"표기법은 일반적으로 Lambda 구문이라고합니다. 첫 번째 표기법에는 여러 이름이 있지만 일반적으로 쿼리 구문이라고합니다.
저는 10 명의 개발자로 구성된 팀에서 일하고 있으며 표준으로 사용해야 할 것에 대해 길게 논쟁합니다. 일반적으로 노련한 (LINQ 사용) 개발자는 Lambda 구문으로 마이그레이션하지만 중요한 예외가 있습니다.
Lambda는 더 간결하지만 다중 테이블 조인을 수행하는 것은 악몽입니다. 조인은 쿼리 구문으로 훨씬 더 깔끔합니다. 반대로, Lambda 구문 내에 만 존재하는 Single (), First (), Count () 등 LINQ 작업이 많이 있습니다.
따라서 가장 편하게 느끼는 것을 사용하고 경험을 쌓을수록 선호도가 바뀔 가능성이 있음을 인식하십시오. 둘 다 읽을 수 있다는 것은 큰 가치가 있으며 둘 다 조금만 사용해야하는 상황도있을 것입니다. 다른 상황은 그들 자신을 다른 스타일보다 한 스타일에 빌려줄 것입니다. 결국 모든 것이 동일한 실행 코드로 변환됩니다.
나는 경우에 따라 내 쿼리에 대해 더 읽기 쉬운 구문을 사용합니다.
가능하면 두 가지를 혼합하고 일치시키는 것을 피하려고 노력하지만 때로는 괜찮습니다 ( First()
예를 들어 쿼리 끝에서 단일 호출 인 경우 ). 지연된 실행은 쿼리 식을 사용하고 결과를 변수에 할당 한 다음 해당 변수를 사용하여 점 표기법을 사용하는 것만 큼 효율적임을 의미합니다 .
var query = from x in y
orderby z
group x by x.Name into groups
// etc
select foo;
var page = query.Skip(50).Take(10);
다른 사람들이 말했듯이 쿼리 식은 쿼리 식없이 "일반적인"C # 3으로 변환되므로이 작업에 대한 패널티가 없습니다.
음, '점'표기법은 훨씬 더 짧을 수 있습니다. 취하다:
var result = from p in dc.Products
where p.Id > 5
select p;
또는:
var result = dc.Products.Where(p => p.Id > 5);
후자가 훨씬 짧고 읽기 쉬우므로 선호합니다.
나는 Lambda 표기법이 더 깔끔하고 간결하다고 생각합니다. 난 그냥 당신이 람다 표현이있는 경우 그것이 성가신 찾아 어디 메서드 호출 내부를, 당신이 디버그 모드에서 즉시 코드를 수정할 수 없습니다 ...
그들은 동일한 코드로 컴파일되거나, 오히려 첫 번째 코드가 먼저 두 번째 코드로 변환 된 다음 컴파일됩니다.
차이점은 첫 번째 버전이 더 깨끗하지만 더 제한적이라는 것입니다. 두 번째에서는 예를 들어 이미 존재하는 델리게이트를 사용할 수 있습니다. 예 :
Func<int, bool> isEven = i => i%2 == 0;
Enumerable.Range(10).Where(isEven).ToList().ForEach(Console.WriteLine);
참조 URL : https://stackoverflow.com/questions/630045/linq-dot-notation-vs-query-expression
'IT story' 카테고리의 다른 글
Akka는 Play에서 어떻게 사용 되나요? (0) | 2020.12.30 |
---|---|
JDBC 소스를 사용하여 (Py) Spark에서 데이터를 쓰고 읽는 방법은 무엇입니까? (0) | 2020.12.30 |
Model View Presenter 란 무엇입니까? (0) | 2020.12.30 |
Django : 기본 키를 지정하지 않고 조명기를 만드시겠습니까? (0) | 2020.12.30 |
렌더링하기 전에 뷰 측정 (0) | 2020.12.30 |