C#NHibernate动态添加Where子句(jqgrid)

时间:2012-10-12 13:21:58

标签: nhibernate filtering nhibernate-criteria queryover

是否可以动态地将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不能以这种方式使用... 有谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

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

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

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

BuildExpression返回Expression&gt;的位置例如

但是,如果您使用字符串名称作为属性,这会变得很痛苦,并且使用session.QueryOver或session.CreateCriteria来实现结果将更加容易,这两者都支持通过名称而不是通过表达式查询属性