2012-07-13 49 views
1

我得的LINQ to NHibernate的查詢:的LINQ to NHibernate的的compareTo不支持

var listka = 
    from i in FakturyZakupu.Queryable 
    where String.Compare(i.REJESTRY.REJ_KOD,sbWartoscBetween1.ToString()) >= 0 
    && String.Compare(i.REJESTRY.REJ_KOD,sbWartoscBetween2.ToString()) <= 0 
    select i; 

lista = listka.ToList(); 

而且它編制得非常好,但如果我使用它,拋出異常:

NotSupportedException異常int32 CompareTo(System.String,System.String)

我怎麼能在兩個值之間使用linq查詢字符串值。像在SQL中: select * from table where a和a之間的id?

回答

4

NHibernate的Linq提供程序很extendable。您可以擴展它以允許任何表達式,只要您可以在HQL中編寫該表達式,因爲NHibernate的Linq正在轉換爲HQL。

所以,如果你寫的擴展名之間,你的代碼看起來是這樣的:

var listka = 
    from i in FakturyZakupu.Queryable 
    where i.REJESTRY.REJ_KOD.Between(sbWartoscBetween1, sbWartoscBetween2) 
    select i; 

lista = listka.ToList(); 

這裏有一些鏈接,讓你開始:

+0

你的第一和第五個鏈接是相同的。也許你願意鏈接到你的第一個http://fabiomaulo.blogspot.fr/2010/07/nhibernate-linq-provider-extension.html。並且您可能希望將http://weblogs.asp.net/ricardoperes/custom-linq-extensions-for-nhibernate添加到列表中,這是添加一些SQL函數支持的最輕的方法。 – 2016-03-24 06:58:33

+0

@Frédéric謝謝。你是對的。修復了鏈接並添加了新的「NHibernate自定義LINQ擴展」鏈接。 – 2016-03-24 11:20:09

-1

有了這樣的疑問,您可以通過簡單地使用大於號(>)或小於(<)運營商避免比較而不是String.Compare。例如:

var listka = 
    from i in FakturyZakupu.Queryable 
    where i.REJESTRY.REJ_KOD > sbWartoscBetween1.ToString() && 
    i.REJESTRY.REJ_KOD < sbWartoscBetween2.ToString() 
    select i; 

您的成功可能取決於您的數據庫對字符串比較的解釋,但通常應該工作得很好。

+0

運算符'>'不能應用於'string'和'string'類型的操作數, – Chad 2014-03-03 16:10:26

0

在NHibernate v3.3.3中,支持String.Compare。 Where表達式中的String.Compare(MyProp, "value") > 0將生成類似於where MyProp > 'value'的sql。

相關問題