linq to nhibernate compareto不支持

我有linq到nhibernate查询:

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(); 

它编译得非常好,但是如果我使用它,则抛出exception:

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

我怎样才能在两个值之间使用linq查询字符串值。 就像在SQL中一样:select * from table from a a和b之间的id?

NHibernate的Linq提供程序非常可扩展 。 您可以扩展它以允许任何表达式,只要您可以在HQL中编写该表达式,因为NHibernate的Linq正在转换为HQL。

因此,如果您为Between编写扩展名,您的代码可能如下所示:

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

以下是一些可以帮助您入门的链接:

  • 由Fabio Maulo提供的NHibernate Linq提供商扩展
  • Linq to NHibernate:String.Equals with StringComparison选项
  • NHibernate 3 – 扩展Linq提供程序以修复某些System.NotSupportedException
  • NHibernate – 自定义Linq提供程序以调用用户定义的SQL函数
  • Linq到NHibernate的扩展
  • 为NHibernate 3 Linq Provider创建In和NotIn扩展方法
  • 扩展NHibernate-LINQ以进行正则表达式匹配
  • 适用于NHibernate的自定义LINQ扩展

在NHibernate v3.3.3中,支持String.Compare。 Where表达式中的String.Compare(MyProp, "value") > 0将生成类似于where MyProp > 'value' sql。

通过这样的查询,您可以通过简单地使用大于(>)或小于(<)运算符而不是String.Compare来避免比较。 例如:

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

您的成功可能取决于您的数据库对字符串比较的解释,但通常应该正常工作。