C# NHibernate ICriterion.NET委托不匹配
我在DI的存储库模式中使用NHibernate,以保持灵活性。我不希望相关接口公开任何特定于供应商的内容,比如ICriterion。但是,我希望我的查询类接受可以放入.Where子句的委托 我需要像这样的东西:C# NHibernate ICriterion.NET委托不匹配,c#,.net,nhibernate,C#,.net,Nhibernate,我在DI的存储库模式中使用NHibernate,以保持灵活性。我不希望相关接口公开任何特定于供应商的内容,比如ICriterion。但是,我希望我的查询类接受可以放入.Where子句的委托 我需要像这样的东西: public IEnumerable<MyClass> Execute(Func<MyClass, bool> selector) { return session .QueryOver<MyClass>() .
public IEnumerable<MyClass> Execute(Func<MyClass, bool> selector)
{
return session
.QueryOver<MyClass>()
.Where(selector)
.....
}
public IEnumerable执行(Func选择器)
{
返回会话
.QueryOver()
.其中(选择器)
.....
}
有没有办法做到这一点,还是我走错了方向?你没有走错方向。我认为你的代码是有效的;您的问题是在内存中检索所有进行筛选的表 我想这应该能够在DB级别对可以转换为SQL的条件进行过滤:
public IEnumerable<MyClass> Execute(Expression<Func<MyClass, bool>> selector)
{
return session.Query<MyClass>().Where(selector).ToList();
}
public IEnumerable执行(表达式选择器)
{
返回session.Query().Where(selector.ToList();
}
我打赌这也会奏效:
public IEnumerable<MyClass> Execute(Expression<Func<MyClass, bool>> selector)
{
return session.QueryOver<MyClass>().Where(selector).ToList();
}
public IEnumerable执行(表达式选择器)
{
return session.QueryOver().Where(selector.ToList();
}
希望这会有所帮助是的,谢谢。我感到困惑,因为表达式类存在于两个名称空间中:NHibernate和System.Linq。这一个使用Linq表达式。