1

是否可以将 where 子句动态添加到 NHibernate 查询?

我有一组子句,我需要循环遍历并在需要时添加 Where 子句 - 即,如果用户输入了多个搜索条件。

我可以编写单个查询,没问题,如下所示:获取以“a”开头的所有名称:

IEnumerable<Customer> customers = nHibernateSession.Query<Customer>().Where(x => x.Name.StartsWith("a")).ToList();

但我不知道如何在其中添加另一个 where 子句实际上我需要这样的东西:

foreach (clauses in SelectionClauses)
{
    //add a .Where(Clause) to The Session.Query
}

我怀疑 nHibernateSession.Query 不能以这种方式使用......有谁知道如何做到这一点?

4

1 回答 1

1

您可以通过执行以下操作使用 Linq 提供程序 (session.Query) 执行此操作:

var query = session.Query<MyClass>();

foreach(var clause in clauses)
    query = query.Where(clause.BuildExpression());

其中 BuildExpression 返回 Expression> 例如

但是,如果您对属性使用字符串名称,这可能会很痛苦,并且使用 session.QueryOver 或 session.CreateCriteria 来获得结果会容易得多,这两者都支持通过名称而不是表达式来查询属性。

于 2012-10-12T13:48:18.773 回答