是否可以动态地将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不能以这种方式使用... 有谁知道怎么做?
答案 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来实现结果将更加容易,这两者都支持通过名称而不是通过表达式查询属性