Jef*_*eff 2 c# linq nhibernate
我正在尝试为我的NHibernate数据访问编写通用存储库.该Get<T>()方法应该能够采用一个可选的谓词,该谓词应该包含在查询中 - 也就是说,NHibernate应该在SQL中生成WHERE子句.
public virtual IList<T> Get(Func<T, bool> predicate = null)
{
// Open NHibernate Session
using (var session = NHibernateHelper.OpenSession())
return (predicate != null
? session.Query<T>().Where(predicate)
: session.Query<T>()).ToList();
}
Run Code Online (Sandbox Code Playgroud)
当我传入一个谓词,并观察NH生成的SQL语句时,我看不到where子句.
NHibernate何时执行查询?什么时候打电话.Query<T>()?如果是这样,我怎么能做到这一点?
查询应该由调用执行ToList().
WHERE子句未包含在sql语句中的情况是您需要将a传递Expression<Func<T,bool>>给您的方法.
public virtual IList<T> Get(Expression<Func<T, bool>> predicate = null)
{
// Open NHibernate Session
using (var session = NHibernateHelper.OpenSession())
return (predicate != null
? session.Query<T>().Where(predicate)
: session.Query<T>()).ToList();
}
Run Code Online (Sandbox Code Playgroud)
扩展方法Where(Func<T,bool>>)在Enumerable上定义,以便查询加载所有数据,然后在内存中应用WHERE过滤器.
扩展方法Where(Expression<Func<T,bool>>)在Queryable上定义,以便查询提供程序(NHibernate)可以构建一个sql语句,包括在数据源上执行的WHERE条件.
| 归档时间: |
|
| 查看次数: |
800 次 |
| 最近记录: |