利用 NHibernate,我尝试使用 lambda 表达式根据父子关系之间的状态和值来检索对象。AbstractWorkflowRequestInformation
有一个集合WorkflowRequestInformationAction
。这两个类中的每一个都有自己的状态属性。为了说明这里是与此查询相关的缩写类:
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 的对象。
我不喜欢使用 lambda 表达式,因为这个表达式已经变得笨拙,如果有更优雅的 ICriteria 表达式,我会全力以赴。我有哪些选项可以根据我的值限制我的结果roles List<KeyValuePair<string, string>>
但防止“不支持指定的方法”异常?