내 질문은/자신의 IQueryable 구현을 할 때 Where() 확장자 IQueryable 메서드를 오버로드하는 것이 의미가 있습니까?IQueryable을 사용하여 확장 .Where 확장. <T> 구현
예를 들어 Entity Framework에서 ObjectSet에 대한 Where() 호출이 데이터베이스로 전달되는 실제 SQL을 변경한다는 것을 이해했습니다. 또는 IEnumerable()로 먼저 캐스팅하면 필터링은 LINQ-To-Entities 대신 LINQ-To-Objects를 사용하여 수행됩니다. 예를 들어
:
new MyDBEntities().MyDbTable.Where(x => x.SomeProperty == "SomeValue");
// this is linq-to-entities and changes the database-level SQL
대 :
new MyDBEntities().MyDbTable.AsEnumerable().Where(x => x.SomeProperty == "SomeValue");
// this is linq-to-objects and filters the IEnumerable
당신이 당신의 자신에 IQueryable과 된 IQueryable 이미 사전에 정의되어 확장 메서드를 구현할 때와 같은 경우로()이 처리 방법은? 특히 네이티브 SQL과 SqlDataReader를 사용하는 매우 간단한 ORM을 만들고 데이터베이스에 전달하기 전에 네이티브 SQL을 변경하는 .Where() 메서드를 갖고 싶습니다.
IQueryable을 사용하거나 완전히 자신 만의 클래스를 만들어야합니까? 람다 구문을 사용하고 필터링에 사용되는 람다 함수를 기반으로 SQL 명령을 변경하려고합니다.
이것이 도움이 될지 모르겠지만 적어도 relinq에서 읽을 수는 있습니다. http://relinq.codeplex.com/ 그들은 이미 찾고있는 것 중 일부를 할 수도 있습니다 (열려 있습니다 출처). 또는 전혀 겹침이 없을 수도 있습니다. –