NHibernate ICriteration.NET委托不匹配

本文关键字:不匹配 NET ICriteration NHibernate | 更新日期: 2023-09-27 18:00:37

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

我需要类似的东西:

public IEnumerable<MyClass> Execute(Func<MyClass, bool> selector)
{
    return session
        .QueryOver<MyClass>()
        .Where(selector)
        .....
}

有没有办法实现这一点,或者我的做法是错误的?

NHibernate ICriteration.NET委托不匹配

你没有走错路。我认为你的代码是有效的;您的问题是,在进行过滤的内存中检索所有表。

我想这应该可以在DB级别过滤可以转换为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();
}

希望这将有助于