NHibernate.ISession.Linq <t> .Where(表达式)检索整个表</t>

时间:2011-08-05 01:16:03

标签: mysql linq nhibernate

我正在使用NHIbernate来对付MySql,当我使用以下语句时,NHibernate Profiler向我显示传递给MySql的查询基本上是SELECT * FROM tablename,带有NO WHERE子句。在检索完所有数据之后才会应用LINQ表达式。从性能角度来看,这显然是不可接受的。我做错了什么?

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

谢谢!

[UPDATE] 正如@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 个答案:

答案 0 :(得分:2)

您应该使用Expression<Func<T, bool>>代替Func<T, bool>