NHibernate를 사용하여 부모 자식 관계 사이의 상태 및 값을 기반으로 개체를 검색하기 위해 람다 식을 사용하려고합니다. AbstractWorkflowRequestInformation
에는 WorkflowRequestInformationAction
의 콜렉션이 있습니다. 두 클래스 각각에는 고유 한 Status 속성이 있습니다. 그들은이 쿼리와 관련된 여기에 설명하기 위해 축약 된 클래스는 다음과 같습니다예외 "지정된 메서드가 지원되지 않습니다."
public class AbstractWorkflowRequestInformation
{
public virtual RequestStatus RequestStatus { get; set; }
public virtual IEnumerable<WorkflowRequestInformationAction>
WorkflowRequestInformationActionList { get; set; }
}
public class WorkflowRequestInformationAction
{
public virtual ActionStatus Status { get; set; }
public virtual string RoleIdentifier { get; set; }
public virtual string RoleName { get; set; }
}
나는 List<KeyValuePair<string, string>>
라는 역할에 따라 AbstractWorkflowRequestInformation 객체를 검색 할이 관계를 감안할 때. 나는 예외가 Any(...)
확장 메서드의 구문 분석의 부족으로 인해 발생하고 있음을 알고 있지만 대체 쿼리가 확실하지 않습니다. 지금까지 아래 쿼리의 모든 순열은 동일하거나 유사한 예외의 원인이 :
public IEnumerable<IRequestInformation> GetRequestsPendingActionBy(
List<KeyValuePair<string, string>> roles)
{
var results = GetSession().Query<AbstractWorkflowRequestInformation>()
.Where(r => r.RequestStatus == RequestStatus.Pending
&& r.WorkflowRequestInformationActionList
.Any(a => ActionStatus.Pending == a.Status
&& roles.Any(kp => kp.Key == a.RoleName
&& kp.Value == a.RoleIdentifier)))
.ToList();
return results;
}
궁극적 인 목표는 보류중인 그 AbstractWorkflowRequestInformation
객체를 검색하고 열거 역할에 KeyValuePair 일치 보류 WorkflowRequestInformationAction하는 것입니다.
나는 더 귀한 ICriteria 표현이 있다면,이 표현이 이미 다루기 힘들어 졌기 때문에 람다 표현식을 사용하는 것에 집착하지 않는다. 내 roles List<KeyValuePair<string, string>>
의 값을 기반으로 결과를 제한 할 수 있지만 "지정된 메소드가 지원되지 않음"예외를 방지하는 옵션은 무엇입니까?
짧은 답변 ... NH Linq를 사용하지 마십시오 – dotjoe
@dotjoe 저는 그 대답에 답할 만하지만 HQL, ICriteria 등을 사용하는 대안이 있습니까? – ahsteele