我在带有 DI 的存储库模式中使用 NHibernate 以保持灵 active 。我不希望关联的接口(interface)公开任何特定于供应商的信息,例如 ICriterion。但是,我希望我的查询类接受可以放入 .Where 子句中的委托(delegate)。
我需要这样的东西:
public IEnumerable<MyClass> Execute(Func<MyClass, bool> selector)
{
return session
.QueryOver<MyClass>()
.Where(selector)
.....
}
有没有办法实现这一点,还是我的做法不对?
你没有走错路。我认为你的代码有效;您的问题是您在完成过滤的内存中检索所有表。
我想这应该能够在数据库级别对可以转换为 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();
}
希望对你有帮助
我是一名优秀的程序员,十分优秀!