#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();