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;
您的成功可能取决于您的数据库对字符串比较的解释,但通常应该正常工作。