문제

클래스 정의(속성으로 개체 참조가 없음)만 사용하고 번역된 SQL을 제공할 수 있는 멍청한 LINQ 공급자를 작성하는 것이 얼마나 쉬울까요?속성과 열의 이름은 물론 클래스와 기본 테이블의 이름도 동일하다고 가정할 수 있습니다.몇 가지 조언을 해주실 수 있나요?

도움이 되었습니까?

해결책

LINQ의 전체 사양을 구현하는 안정적인 작업 제공 업체를 구축하는 데 약 4 개월의 풀 타임 근무 (하루 8 시간)가 필요했습니다. 나는 약 3 주 후에 매우 간단하고 버그가 많고 불안정한 버전을 가지고 있다고 말하고 싶습니다. 그래서 당신이 거친 것을 찾고 있다면 아마도 당신은 당신이 얼마나 좋은지에 따라 일주일에서 2 개월까지 무엇이든보고 있다고 말할 것입니다. 어떤 유형의 필수 요소가 있습니다.

Matt는 LINQ 제공 업체를 구현하는 방법에 대해 정말 좋은 연습을 작성했으며, 아마도 복사 및 붙여 넣기를 할 수 없을지라도 도달하는 데 도움이 될 것입니다. 일할 때 생각하는 방법을 잡습니다. Matt의 연습을 여기에서 찾을 수 있습니다. http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-part-part-i.aspx . 나는 당신이 Matt와 같은 방식으로 그것에 대해 이야기하고, 튜토리얼의 두 번째 부분에 Matt가 포함 된 Expression Tree 방문자를 확장하는 것이 좋습니다.

또한, 이것으로 작업을 시작했을 때, 나는 Expression Tree Visualizer의 많은 도움을 받았기 때문에 LINQ가 쿼리에 어떻게 구문 분석했는지 알 수있게되면 실제로 훨씬 쉬워졌습니다.

공급자를 구축하는 것은 때때로 약간 실망하더라도 정말 재미 있습니다. 행운을 빕니다!

다른 팁

linqextender 프로젝트는 사용자 정의 LINQ 제공 업체를 작성하기위한 툴킷입니다.

다리를 부여하는 또 다른 옵션은 리 린 Q 이는 사용자 정의 LINQ 제공 업체를 작성하기위한 프레임 워크입니다.

여기에 있습니다 소스 코드 그리고 좋은 개요 (PDF) 글을 쓰는 데 관련된 것.

저는 처음부터 LINQ-to-SQL 공급자를 개발한 경험을 바탕으로 식 트리 구성 단계(LINQ 메서드 호출)부터 시작하여 식 방문자를 계속하고 쿼리를 분석한 경험을 바탕으로 블로그에 튜토리얼 시리즈를 작성했습니다. 구성 요소로 변환하고, where 절을 구문 분석하고, 텍스트와 매개 변수를 생성하고, 결국 .NET 표현식 네임스페이스를 사용하여 모든 것을 IL로 컴파일합니다.

나는 공급자 작성 방법을 설명하겠다고 약속하고, 목표에 매우 못 미치고, 겉만 긁어대고, 실제로 원격으로 실행 가능한 어떤 것도 제공하지 않는 불완전한 게시물을 많이 보았습니다.

내 경험을 바탕으로 작성한 블로그 시리즈에는 튜토리얼 예제에 필요한 기능만 다루는 간단한 공급자와 함께 다운로드할 수 있는 샘플 프로젝트가 있습니다.그러나 여기에는 다양한 작업(where, Join, First, Count, Top 등), 하위 쿼리, 중첩 문 등을 지원하는 프로덕션 버전도 포함됩니다.또한 엔터티 및 LINQ-to-SQL에서 본 많은 것보다 더 깔끔한 SQL을 생성합니다.불필요하거나 중복된 중첩이 없으며 모든 것을 괄호로 묶는 등의 작업이 없습니다.

높은 수준의 추상적 사고를 가진 사람이라면 그러한 공급자를 개발하는 것이 많은 사람들이 생각하는 그렇게 어려운 작업이 아닙니다.약 3개월간 아르바이트(일부 저녁 및 주말)를 통해 프로덕션 환경에서 사용되는 것을 개발했습니다.처음부터 성능과 깔끔한 ​​SQL을 염두에 두고 목표를 달성했습니다.

이 자료를 게시할 시간을 찾기가 조금 어려웠지만, 누군가에게 도움이 될 수 있다면 이 경험을 낭비할 이유가 없다고 생각했습니다.

나는 프로젝트를 만들었다 'linqtoanything'(간단한) LINQ 제공 업체를 쉽게 구현할 수 있도록 설계되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top