Преобразование кода из NHibernate 2.x в 3.x

#c# #linq #nhibernate

#c# #linq #nhibernate

Вопрос:

Я играю с NHibernate и пытаюсь создать универсальный, Repository используя эту статью.
В статье используется NHibernate 2.x, а я использую версию 3.x. я хочу преобразовать следующий код, но я хочу убедиться, что выполнение осталось прежним.
Исходный код

 public IList<T> GetListBy<T>(Expression<Func<T, bool>> query = null)
{
    return InnerSession.Linq<T>().Where(query).ToList();
}
  

Преобразованный код

  public T GetItemBy<T>(Expression<Func<T, bool>> query) where T : class
 {
     return (T)InnerSession.QueryOver<T>().Where(query);  //.SingleOrDefault(query);
 }
  

Правильное ли это преобразование?

Ответ №1:

Если вы хотите использовать LINQ, правильное преобразование:

 return InnerSession.Query<T>().Where(query).ToList();
  

Query<T>() это метод расширения в другом пространстве имен (NHibernate.Linq).

Комментарии:

1. Выполнение запроса работает нормально, если linq не требуется. Но вы должны добавить List() метод для выполнения запроса. return (T)InnerSession.QueryOver<T>().Where(query).List();