1

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

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

我们有一个在 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 是用户可选择的字段,例如他可以选择部门、城市等。

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

4

2 回答 2

3

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

这将允许您通过使用字符串以动态方式使用用户选择的字段。

我打算写一个代码示例,但我觉得有人已经在另一个 StackOverflow 问题上做得很好:https ://stackoverflow.com/a/696020/670028

关于 ICriteria Projections 的官方 NHibernate 文档:http: //nhibernate.info/doc/nh/en/index.html#querycriteria-projection

于 2012-11-21T16:49:48.007 回答
0

文档中关于不同查询 API 的第 14、15、16 和 17 章:http: //nhibernate.info/doc/nh/en/index.html

除了这些之外,还支持 LINQ,除非您遇到它的限制,否则它现在可能应该是您首选的查询 API。如果您正在构建一个新系统,您应该从 NH 3.3.2 开始,以访问最新的 LINQ 改进。

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

于 2012-11-20T12:19:40.453 回答