내가 엔티티 프레임 워크 코드에 꽤 표준 검색 기능을 구현하는 저장 프로 시저를 변환하고, 그리고 SQL의 비트가 무엇을하고 있는지 수행하는 방법을 아주 확실하지 않다 : 그래서EF 조건부 가입 또는
SELECT
*
FROM
MyTable a
WHERE
@parameter1 = 0 OR a.Id IN
(
SELECT ot.Id FROM OtherTable ot
WHERE ot.Id = @parameter1
AND (@parameter2 = 0 OR ot.OtherValue = @parameter2)
)
기본적으로 일부 선택적 검색 매개 변수가 전달되며 0이 아닌 경우 필터로 사용됩니다. 꽤 표준.
위의 경우 M : 1 관계가 있고, "많은"쪽에 OtherTable이 있습니다.
나는 두 가지 옵션을 참조하지만 난에 대한 올바른 구문을 얻을 수없는 것 중 하나
(1) 나는 조건부로 SP에서 수행되고 있는지 시뮬레이션 할 수있는 곳 절 (Example Here). 나는 이와 같은 것을 시도했다 :
.WhereIf(search.Id != 0, mytable => search.AttributeId == mytable.OtherTables)
이것은 @ parameter2를 위해 더 필터링되어야 할 것이다. 그러나 어떤 경우에는 mytable.OtherTables는 "많은"측면에 있으므로 컬렉션이므로 mytable.OtherTables.Id와 같이 사용할 수 없습니다.
(2) 이것을 조인으로 변환 할 수 있지만 조인은 조건부이어야합니다 (@ parameter1! = 0 인 경우 조인 만 포함해야 함). 조건부 합류가 L2S/EF와 가능한지 확실하지 않습니다.