내가 술어 빌더를 데하고 노력하고 내가 지금은 조건을 추가 할 수 있도록 다른 술어 빌더로 임명 안에 조건을 분할하려고식으로 두 개의 서로 다른 PredicateBuilders을 결합
var filter = sortKeys.Aggregate(filter, (currentFilter, sortkey) => currentFilter.Or(
x => x.Appointments.Any(y => y.RowStatus == Constants.CurrentRowStatus)));
잘 이동하고 기능을 재사용하십시오.
내가 표현을 만든 다음 주 술어 빌더를 사용하여 시도했다 그러나 위의 표현을 사용하는
private static Expression<Func<Appointment, bool>> TmpApt(string status)
{
var predicate = PredicateBuilder.False<Appointment>();
predicate = predicate.Or(p => p.RowStatus == status);
return predicate;
}
변경된 주요 술어를 실패
var filter = sortKeys.Aggregate(PredicateBuilder.True<Person>(), (current, s) =>
current.Or(x => x.Appointments.Any(TmpApt(s))));
그것은 오류를 보여주는 그
인수 유형 '
System.Linq.Expressions.Expression<System.Func<Appointment,bool>>
'은 이 아니며 assignabl입니다. e에서 매개 변수 유형System.Func<Appointment,bool>
심지어 확장과 같은 LinqKit 확장 방법을 시도했지만 해결책을 찾을 수있었습니다.
또한 어플리케이션 측에서 그 질의 운영자Any
'사용
지원되지 않는 오버를 나타내는 경우 컴파일하지만시키면서이 오류를 표시하지 않고, Reusable predicate expressions in LINQ을 시도했다.
누구든지 오류 해결 방법을 제안하거나 다른 해결책을 제안 할 수 있습니까?
대단히 감사합니다 ... 당신의 솔루션은 훌륭하게 작동하지만 새로운 문제가 생겼습니다. TmpApt()에 매개 변수를 전달하고 싶습니다. 매개 변수 값은 "s"(집계에 있음)에서옵니다. 변수로 선언 한 다음 호출 할 때 전달하는 방법을 모르겠습니다. 이 문제를 해결할 수있는 방법이 있습니까? 주요 질문도 업데이트 할 것입니다. 미안하지만 내 실수 였어. T. 메서드의 변수를 제거했는지 쉽게 질문하게하십시오. 도와 주셔서 대단히 감사합니다. – Rocky
@Rocky 음 가장 간단한 옵션은'TmpApt'의 호출을'Aggregate' 람다에 리팩토링하는 것입니다.당신이 LINQKit에서 버그를 수정하고 싶지 않다면, 식으로 컴파일 된 람다 안에있을 수는 없습니다. 이것은 가능하지만 간단하지는 않습니다. – Servy