Ошибка QueryOver: нераспознанный вызов метода в значении выражения - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть запрос по QueryOver в Nhibernate3.1

 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 ]

4 голосов
/ 29 июля 2012

Я решил аналогичную проблему, возвращая дерево выражений в своем методе предикатов вместо непосредственного возврата логического значения. На вашем примере это будет примерно так:

private Expression<Func<PersonType, bool>> IsActive()
{
    return (t => t == PersonType.Employee );
}
2 голосов
/ 21 февраля 2012

Ваш метод IsActive - это метод, скомпилированный непосредственно в IL. Анализатор запросов не может разобрать этот метод и построить из него запрос. Я не уверен, как вы можете представить выражение из метода и использовать его в запросе с NHibernate, но я уверен, что Google может помочь вам в этом.

1 голос
/ 21 февраля 2012

Разве вы не можете просто сделать это?

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