Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate ICriterion.NET委托不匹配_C#_.net_Nhibernate - Fatal编程技术网

C# NHibernate ICriterion.NET委托不匹配

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>() .

我在DI的存储库模式中使用NHibernate,以保持灵活性。我不希望相关接口公开任何特定于供应商的内容,比如ICriterion。但是,我希望我的查询类接受可以放入.Where子句的委托

我需要像这样的东西:

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表达式。