LINQ 및 LINQ2SQL이없는 LINQ 및 동적 쿼리
문제
LINQ 동적 쿼리 인 LINQKIT 및 LINQ 동적 쿼리 라이브러리를 사용하는 몇 가지 방법을 시도했습니다. 컴파일 시간에 쿼리를 확인할 수 있도록 LINQ 아이디어를 죽이기 때문에 두 번째는 마음에 들지 않습니다. 그리고 LinqKit과 함께 나는 시나리오에 대한 좋은 예를 찾지 못했습니다. 또한 나는 반사를 사용하는 과도한 것을 좋아하지 않습니다.
내 시나리오는 다음과 같습니다. 비즈니스 로직과 DAL 논리를 수행하는 웹 서비스가 있습니다. WebForms 응용 프로그램이 분리되어 있습니다. 사용자가 필터링하려는 각 필드마다 진드기 상자가있는 페이지와 각 필터 값을 입력하는 텍스트 상자도 있습니다. 내 웹 서비스에는 목록을 전달하는 방법이 있습니다. QueryObject는 문자열이있는 클래스입니다 : filedName, Object : FieldValue.
그런 다음 내 웹 서비스는 쿼리 객체 목록을 수신하고 이제 큰 질문이 있습니다. 필드 수와 필터 값이 다를 수있는 경우 LINQ 쿼리로 변환하는 방법은 무엇입니까?
더 나쁜 것은 LINQ2SQL을 사용하지 않지만 필요한 경우 iQuery를 반환 할 수있는 리포지토리와 함께 사용자 정의 DAL을 사용합니다 (이와 같이 :http://msdn.microsoft.com/en-us/magazine/dd569757.aspx저장소로 스크롤).
나는 linq2sql : var pageddata = query.skip ((ipagenum -1) * ipagesize) .take (ipagesize);
그렇다면 Dataprovider 특정 방식으로 해당 쿼리를 실행하기 위해 LINQ에서 기본 DAL 구현으로 동적 쿼리 매개 변수 (및 iPagenum 및 iPagesize)를 어떻게 얻을 수 있습니까? 어쩌면 나는 DAL을 LINQ 데이터 제공 업체로 구현해야 할 것입니다 (어떻게 해야할지 모르겠습니다)?
문제는 -Linq2SQL에 의존하고 싶지 않다는 것입니다 (그런 다음 리포지토리를 LINQ2SQL의 래퍼로 구현할 수 있음). 동시에 DAL 외부의 모든 곳에서 LINQ 쿼리 능력을 갖고 싶습니다. 가능합니까?
해결책
확실히 가능합니다. 당신이 찾고있는 것은 자신만의 iqueryable, "Custom LINQ 제공 업체"를 만드는 것입니다.
MSDN 기사는 다음과 같습니다. http://msdn.microsoft.com/en-us/library/bb546158.aspx그리고 Matt Warren은 그것에 대한 블로그 시리즈를 얻었습니다. http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-part-part-i.aspx
나는 그것이 얼마나 힘든지, 그것이 당신에게 가치가 있는지 확인하기 위해 시작하는 것이 좋습니다!
당신이 그것에 반대하는 경우,이 블로그 게시물을 읽으십시오. http://www.hanselman.com/blog/realworldappsindaysnotweeks.aspxado.net data services (astoria)가 당신에게 어떤 용도로 사용되는지 확인하십시오.