public IEnumerable<IDocument> Search(Predicate<IDocument> predicate) { ... }
을 IDocument는 다음과 같습니다 여기서
내가 분해 할 문서 바이더의 구현에 대한 생각public interface IDocument
{
string Id {get; set;}
string Title {get; set;}
...
}
우리가 현재 OR/M 매핑을 가지고 있지 않은 문서 데이터베이스에 대한 SQL 문자열을 만들기 위해 Predicate의 내용을 추출하고 속성을 추출합니다. 예 : 사용자가 ID 또는 제목으로 검색 중인지 알고 싶습니다. 따라서 ID로 검색하거나 제목에서 LIKE 검색을 수행해야하는지 알 수 있습니다.
저는 항상 LINQ를 많이 사용했지만 파이프 라인의 다른 끝에 앉아있는 것은 이번이 처음입니다 ... 표현 트리 및 리플렉션에서 약간 읽었지만 조각이 떨어지지 않았습니다. 아직 자리에 있습니다. 어떻게하면 (?) 술어를 분해/반영하여 SQL 문자열로 연결할 수있는 매개 변수 목록을 얻을 수 있습니까? 나는이 거친 스케치 같은 뭔가를 찾고 있어요 :
public IEnumerable<IDocument> Search(Predicate<IDocument> predicate)
{
string id = DoSomeMagic(predicate, "Id");
string title = DoSomeMagic(predicate, "Title");
if (!string.isNullOrEmpty(id))
...make ID search
else
...search by title
}
면책 조항 : 공급자 인라인 SQL에게 올바른 선택을하게 올 가을 교체 행 사내 레거시 시스템에 대한; O)
를 호출하여 식을 실행할 수 있습니다
(LinqPad가 정말 잘 발현을 시각화 덤프 확장 방법을 제공합니다) LinqPad에서 다음을 실행 해보십시오 할 것. 우리가 구축해야하는 표현식 트리가 극도로 복잡해져서 술어에 반대하고 더 많은 KISS 접근법을 사용합니다. – kerbou