QueryOver错误:表达式值中无法识别的方法调用

时间:2012-02-21 12:37:44

标签: c# nhibernate queryover

我在Nhibernate3.1

中有QueryOver的查询
 var q = SessionInstance.QueryOver<Person>()
         .Where(x => IsActive(x.PersonType) == true);

 return q.List<Person>();

通过这种方法:

private bool IsActive(PersonType type)
{
   if(type == PersonType.Employee
      return true;
   else
      return false;
}

现在,此消息出现运行时错误:

  

表达式值

中无法识别的方法调用

为什么?

3 个答案:

答案 0 :(得分:4)

我通过在谓词方法中返回表达式树而不是直接返回布尔值来解决类似的问题。使用你的例子,它是这样的:

private Expression<Func<PersonType, bool>> IsActive()
{
    return (t => t == PersonType.Employee );
}

答案 1 :(得分:2)

您的方法IsActive是直接编译为IL的方法。查询分析器无法剖析此方法并从中构建查询。我不确定如何从方法中公开表达式并在NHibernate的查询中使用它,但我确信谷歌可以帮助你。

答案 2 :(得分:1)

你能不能这样做吗?

var q = SessionInstance.QueryOver<Person>()
         .Where(x => x.PersonType == PersonType.Employee);