2012-04-18 3 views
0

Linq를 사용하여 리포지토리 외부의 쿼리를 구성하면서도 리치 외부의 엔티티에 노출/누출없이 데이터베이스에서 데이터를 필터링 할 수 있습니까? 분명히 Query() 메서드 나 심지어 스펙 객체의 매개 변수로 lamba 표현식을 만들 수는 있지만 저장소에서 사용되는 데이터 공급자에 상관없이 효율적인 임시 쿼리를 만들기 위해 Linq를 사용하려고합니다. 예를 들어저장소 외부에서 Linq를 사용할 수 있고 데이터베이스 내부에서 여전히 필터를 사용할 수 있습니까?

:

var myProductID = myRepo.Query() 
        .Where(p => p.color.Contains("green")) 
        .Select(p => p.ID.ToString()); 

개념은 상호 배타적 인 것 같다.

답변

2

그러나 나는 어떻게 든 Linq를 사용하여 저장소에서 어떤 데이터 공급자가 사용되는지에 관계없이 효율적인 특별 쿼리를 만들려고했다.

이 아이디어는 실패 할 운명입니다. 모든 LINQ 표현식이 모든 LINQ 제공자에 의해 해당 제공자가 처리 할 수있는 것으로 변환 될 수있는 것은 아닙니다. 그것이 "LINQ to Entities가 메서드를 인식하지 못합니다."라는 소스 또는 다른 LINQ 공급자에 대한 유사한 예외 메시지의 소스입니다. LINQ to SQL은 처리 할 수 ​​있지만 LINQ to Entities는 처리 할 수 ​​없으며 그 반대도 마찬가지입니다. NHibernate에서 LINQ 공급자에 대해 비슷한 문제를 던집니다.

즉, 저장소를 통해 쿼리하기 위해 LINQy 방식을 사용하는 것은 새어 난 추상화입니다. 회피, 회피, 회피.

+2

일부 EF Linq 쿼리 *는 Linq와 객체를 같은 구문으로 사용할 때 다르게 작동합니다 (예 : SequenceEqual vs == 바이트 배열에서). 매우 누출 된 추상화입니다. – BrokenGlass

+0

@BrokenGlass : 뛰어난 점. – jason

관련 문제