C# 将SQL语句转换为NHibernate查询

C# 将SQL语句转换为NHibernate查询,c#,nhibernate,asp.net-mvc-4,C#,Nhibernate,Asp.net Mvc 4,我昨天试图问这个问题,但我认为我的措辞不是很清楚 因此,我试图改写下面的问题 我们有一个在MVC4中重写的现有系统,我们在新系统中使用NHibernate 3.2 在旧系统中,我们构建了一个类似以下内容的SQL语句: SELECT myField as series, pstatus, Year(acc_date) AS year, Month(acc_date) AS month, COUNT(CAST(reportable AS INT)) AS to

我昨天试图问这个问题,但我认为我的措辞不是很清楚

因此,我试图改写下面的问题

我们有一个在MVC4中重写的现有系统,我们在新系统中使用NHibernate 3.2

在旧系统中,我们构建了一个类似以下内容的SQL语句:

SELECT myField as series, 
    pstatus, 
    Year(acc_date) AS year, 
    Month(acc_date) AS month, 
    COUNT(CAST(reportable AS INT)) AS totalreportable, 
    SUM(CAST(reportable AS INT)) AS riddorreportable, 
    SUM(CAST(lt_acc AS INT)) AS losttime, 
    SUM(CAST(acc_losttime AS INT)) AS totaldayslost, 
    SUM(CAST(nearmiss AS INT)) AS nearmiss 
    FROM incident 
    WHERE 1=1
在上面,我们将用nHibernate标准(我们在系统中已经有了过滤数据的标准)替换“WHERE 1=1”

上述SQL语句中的myField是用户可以选择的字段,例如,用户可以选择Department、City等


因此,我需要的是关于如何使用nHibernate实现与上述SQL语句相同的结果的信息。

文档中关于不同查询API的第14、15、16和17章:

除此之外,还有对LINQ的支持,现在,LINQ可能是您首选的查询API,除非您遇到它的限制。如果您正在构建一个新系统,您应该从NH3.3.2开始,以获得最新的LINQ改进


所有查询API都可以根据一些用户输入选择(项目)不同的属性。我认为您可能需要更具体地说明您尝试了什么或遇到了什么问题,以获得更详细的响应。

由于您已经在使用ICriteria API来构造WHERE子句,因此需要使用ICriteria的SetProjection()方法来构建动态SELECT子句

这将允许您使用字符串以动态方式使用用户的选定字段

我本来打算写一个代码示例,但我觉得有人在另一个问题上已经做得很好了:


关于ICriteria预测的NHibernate官方文档:

我查看了您之前提出的问题(),试图更好地了解您试图实现的目标,但您提到where条款现在使用NHibernate标准,这让我感到有些不清楚。您是说您正在使用ICriteria查询API来构建WHERE子句吗?此外,当您声明允许用户选择特定列时,该列是否也用于WHERE子句中,还是仅用于select?Hi Randy-是的,我们正在构建一个新系统,该系统必须模拟现有系统的功能。WHERE子句可以包含所选字段——从某种意义上说,WHERE子句是什么并不重要。新系统使用ICriteria查询API构建WHERE子句。