簡體   English   中英

將SQL語句轉換為NHibernate Query

[英]Convert SQL statement to NHibernate Query

昨天我試着問這個問題,但我認為我的措辭不是很明確。

因此,我試圖改寫下面的問題。

我們有一個現有的系統,我們在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語句相同的結果的信息。

由於您已經在使用ICriteria API來構造WHERE子句,因此您需要使用ICriteria的SetProjection()方法來構建動態SELECT子句。

這將允許您通過使用字符串以動態方式使用用戶的選定字段。

我打算寫一個代碼示例,但我覺得有人已經在其他StackOverflow問題上做得很好: https ://stackoverflow.com/a/696020/670028

有關ICriteria預測的官方NHibernate文檔: http ://nhibernate.info/doc/nh/en/index.html#querycriteria-projection

有關不同查詢API的文檔中的第14,15,16和17章: http//nhibernate.info/doc/nh/en/index.html

除了那些之外,還支持LINQ,現在它應該是你首選的查詢API,除非你遇到它的局限性。 如果要構建新系統,則應從NH 3.3.2開始,以訪問最新的LINQ改進。

可以使所有查詢API基於某些用戶輸入選擇(項目)不同的屬性。 我認為您可能需要更加具體地了解您所嘗試的內容或您遇到的問題以獲得更詳細的響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM