我在使用DI的存储库模式中使用NHibernate以保持灵活性。我不希望关联的接口公开像ICriterion那样的特定供应商。但是,我希望我的查询类接受一个可以放入.Where子句的委托。
我需要类似的东西:
public IEnumerable<MyClass> Execute(Func<MyClass, bool> selector)
{
return session
.QueryOver<MyClass>()
.Where(selector)
.....
}
有没有办法实现这个目标,还是我以错误的方式解决这个问题?
答案 0 :(得分:0)
你没有走错路。我认为你的代码有效;你的问题是你在内存中检索所有过滤完成的表。
我想这应该在数据库级别启用过滤,以获得可以转换为SQL的条件:
public IEnumerable<MyClass> Execute(Expression<Func<MyClass, bool>> selector)
{
return session.Query<MyClass>().Where(selector).ToList();
}
我敢打赌这也应该有效:
public IEnumerable<MyClass> Execute(Expression<Func<MyClass, bool>> selector)
{
return session.QueryOver<MyClass>().Where(selector).ToList();
}
希望这会有所帮助