NHibernate ICriterion .NET委托不匹配

时间:2013-02-23 14:24:51

标签: c# .net nhibernate

我在使用DI的存储库模式中使用NHibernate以保持灵活性。我不希望关联的接口公开像ICriterion那样的特定供应商。但是,我希望我的查询类接受一个可以放入.Where子句的委托。

我需要类似的东西:

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

有没有办法实现这个目标,还是我以错误的方式解决这个问题?

1 个答案:

答案 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();
}

希望这会有所帮助