2

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

我需要类似的东西:

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

有没有办法实现这一点,还是我以错误的方式去做?

4

1 回答 1

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

希望这会有所帮助

于 2013-02-23T16:07:02.557 回答