【问题标题】:C# NHibernate dynamically add Where clauses (jqgrid)C# NHibernate 动态添加 Where 子句 (jqgrid)
【发布时间】:2012-10-12 13:21:58
【问题描述】:

是否可以将 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 不能以这种方式使用... 有谁知道如何做到这一点?

【问题讨论】:

    标签: nhibernate filtering nhibernate-criteria queryover


    【解决方案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 来实现结果会容易得多,这两者都支持通过名称而不是表达式来查询属性.

    【讨论】:

    • 谢谢@Martin!我是 nHibernate 的新手 - 和 Linq 就这件事。我已经使用上面使用的查询解决了它,并使用 switch 语句来确定我使用的表达式。
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2012-12-28
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多