我正在使用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
)
答案 0 :(得分:2)
您应该使用Expression<Func<T, bool>>
代替Func<T, bool>
。