NHibernate.ISession.Linq <T>.Where (выражение) извлекает всю таблицу - PullRequest
1 голос
/ 05 августа 2011

Я использую NHIbernate против MySql, и когда я использую следующий оператор, NHibernate Profiler показывает мне, что запрос, передаваемый MySql, в основном SELECT * FROM tablename с предложением NO WHERE.Выражение LINQ не применяется до тех пор, пока не будут получены все данные.Это явно неприемлемо с точки зрения производительности.Что я делаю не так?

Session.Linq<T>().Where(expression).AsQueryable()

Спасибо!

[ОБНОВЛЕНИЕ] Как и предполагал @GertArnold, предшествующий вызов был:

public IQueryable<Student> FindByExpression(Func<Student, bool> expression)

Выражение

   _studentRepository.FindByExpression(t =>
         (t.Teacher.Id == dto.TeacherId) &&
         (t.Id != dto.Id) &&
         (
           (t.ExternalId != null && student.ExternalId != null
         )

1 Ответ

2 голосов
/ 06 августа 2011

Вы должны использовать Expression<Func<T, bool>> вместо Func<T, bool>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...