Универсальный NHibernate Linq выберите с помощью функции - PullRequest
1 голос
/ 01 декабря 2011

Я пытаюсь сделать общий выбор для объекта nhibernate. Я передаю Func в метод get ...

T Get(Func<T, bool> selectQuery)
{
    using (var session = SessionFactory.Session.OpenSession())
    {
        return (from x in session.Query<T>() where selectQuery(x) select x).FirstOrDefault();
    }
}

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

"Невозможно привести объект типа 'NHibernate.Hql.Ast.HqlParameter' к типу 'NHibernate.Hql.Ast.HqlBooleanExpression'."

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

1 Ответ

2 голосов
/ 01 декабря 2011

Сейчас я не могу это проверить, но, думаю, проблема в том, что вместо передачи дерева выражений вы передаете делегат.Попробуйте это:

T Get(Expression<Func<T, bool>> selectQuery)
{
  using (var session = SessionFactory.Session.OpenSession())
  {
      return (from x in session.Query<T>() where selectQuery(x) select x).FirstOrDefault();
  }
}

(надеюсь, он скомпилируется без ошибок, компилятор не будет под рукой)

...