我在基本倉庫模型中使用NH2.1和FluentNH配置和Linq2NH。我試圖設置一個查詢來消化來自winform的各種表單域。該標準是一個很值得一系列文本框,每一個複選框,說明該標準是否包含通配符(只有星號支持),所以邏輯是一系列的:NHibernate查詢的複雜標準:Linq或ICriteria?
...
&& Field1.IsNullOrBlank() || Field1 == Criteria1 || (Criteria1IsWildCard && Regex.Match(Field1, Criteria1.Replace("*",".*")))
&& Field2.IsNullOrBlank() || Field2 == Criteria2 || (Criteria2IsWildCard && Regex.Match(Field2, Criteria2.Replace("*",".*")))
現在,這將會是偉大的Linq2Objects,但是由於多種原因(自定義擴展方法,正則表達式檢查等),Linq2NH查詢不會有太大的改進。
我創建了一個不同的搜索頁面,必須消化類似的數據,但是該查詢是針對不同的Repository數據源執行的,該數據源需要查詢作爲字符串(SalesForce SOQL)。由於NHibernate有很多更復雜的編譯器檢查工具可用,我寧願HQL是我的最後選擇。
其他相關信息:
- 檢索,並以過濾使用Linq2Objects結果緩存整個表的內容幾乎是行不通的(該表是約15000條記錄),但是任何選項,不必這樣做是非常受歡迎的。
- 用戶需要有儘可能多的通配符;因此,使用StartsWith()/ EndsWith()/ Contains()解決方法將不可行。
所以,問題是,你將如何設置這個對NHibernate執行?
不作爲星號,但MSS支持使用%通配符進行LIKE比較,並且NH ICriteria模型直接支持此操作,而Linq2NH支持將StartsWith,EndsWith和Contains轉換爲開頭,結尾或雙方的% 。 – KeithS 2010-12-08 15:30:08