배경 : 다음 달에, 나는 적어도 LINQ
에 관한 내용을 포함 해서 적어도 세 번의 연설을 할 것 입니다 C#
. 사람들이 이해하기 어려울 수있는 부분 또는 잘못된 인상을 받았을 수있는 주제에 따라 어느 정도의 관심을 기울일 가치가 있는지 알고 싶습니다. 내가 특별히 얘기하지 않습니다 LINQ
에 SQL
제외 쿼리가 원격으로 (보통과 표현의 나무를 사용하여 실행 할 수있는 방법의 예로 또는 엔티티 프레임 워크 IQueryable
).
그래서 무엇에 대해 열심히 찾았 LINQ
습니까? 오해의 관점에서 무엇을 보았습니까? 예는 다음 중 하나 일 수 있지만 자신을 제한하지 마십시오!
C#
컴파일러가 쿼리 표현식을 처리 하는 방법- 람다 식
- 표현 트리
- 확장 방법
- 익명 유형
IQueryable
- 지연된 대 즉시 실행
- 스트리밍 vs 버퍼 실행 (예 : OrderBy가 지연되었지만 버퍼링 됨)
- 암시 적으로 입력 된 지역 변수
- 복잡한 일반 서명 읽기 (예 : Enumerable.Join )
답변
실행 지연
답변
나는 지금까지 연기 된 실행 개념이 나에게 맞아야한다는 것을 알고 있지만,이 예제는 실제로 그것을 이해하는 데 도움이되었다.
static void Linq_Deferred_Execution_Demo()
{
List<String> items = new List<string> { "Bob", "Alice", "Trent" };
var results = from s in items select s;
Console.WriteLine("Before add:");
foreach (var result in results)
{
Console.WriteLine(result);
}
items.Add("Mallory");
//
// Enumerating the results again will return the new item, even
// though we did not re-assign the Linq expression to it!
//
Console.WriteLine("\nAfter add:");
foreach (var result in results)
{
Console.WriteLine(result);
}
}
위의 코드는 다음을 반환합니다.
Before add:
Bob
Alice
Trent
After add:
Bob
Alice
Trent
Mallory
답변
이 단지보다 더 많은 것을 LINQ
에 SQL
와 기능은 더 단지보다 SQL
언어에 포함 된 파서.
답변
큰 O 표기법 . LINQ를 사용하면 수행중인 작업을 모르는 경우 O (n ^ 4) 알고리즘을 구현하지 않고도 매우 쉽게 작성할 수 있습니다.
답변
Lambda
식이 식 트리와 익명 대리자 둘 다로 해석 될 수 있으므로 동일한 선언식 lambda
을 IEnumerable<T>
확장 메서드와 IQueryable<T>
확장 메서드 모두에 전달할 수 있다고 생각합니다 .
답변
나를 툭 방법 등 많은 LINQ 확장 방법을 실현하는 데 시간이 너무 오래 Single()
, SingleOrDefault()
등이 람다을 과부하가 있습니다.
넌 할 수있어 :
Single(x => x.id == id)
이것을 말할 필요가 없습니다-나쁜 튜토리얼로 인해 습관이 생겼습니다.
Where(x => x.id == id).Single()
답변
LINQ to SQL에서 나는 DataContext를 이해하지 못하는 사람들, 그것을 어떻게 사용할 수 있고 어떻게 사용해야 하는지를 끊임없이 봅니다. 너무 많은 사람들이 지속성 오브젝트가 아닌 작업 단위 오브젝트가 무엇인지 DataContext를 보지 못합니다.
사람들이 각 작업에 대해 새로운 시간을 만드는 대신 DataContext / 세션 / 세션 등을 싱글 톤하려고하는 많은 시간을 보았습니다.
그런 다음 IQueryable을 평가하기 전에 DataContext를 폐기하지만 사람들은 DataContext보다 IQueryable을 이해하지 못하는 경향이 있습니다.
내가 혼동하는 다른 개념은 Query Syntax vs Expression Syntax입니다. 그 시점에서 가장 쉬운 것을 사용하고 종종 Expression Syntax를 사용합니다. 많은 사람들이 여전히 똑같은 결과물을 만들어 낼 것이라는 것을 아직 모르고 있습니다. Query는 결국 Expression으로 컴파일됩니다.