不支持 linq to nhibernate compareto
Posted
技术标签:
【中文标题】不支持 linq to nhibernate compareto【英文标题】:linq to nhibernate compareto not supported 【发布时间】:2012-07-13 00:45:24 【问题描述】:我有 linq to 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();
而且它编译的很好,但是如果我使用它,就会抛出异常:
NotSupportedException int32 CompareTo(System.String, System.String)
如何在两个值之间使用 linq 查询字符串值。就像在 SQL 中一样: select * from table where id 在 a 和 b 之间?
【问题讨论】:
【参考方案1】:NHibernate 的 Linq 提供者非常 extendable。您可以扩展它以允许任何表达式,只要您可以在 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();
以下是一些帮助您入门的链接:
NHibernate Linq provider extension by Fabio Maulo Linq to NHibernate: String.Equals with StringComparison option NHibernate 3 - Extending the Linq Provider to fix some System.NotSupportedException NHibernate - Customize the Linq provider to call your user defined SQL functions Linq to NHibernate extensions Creating In and NotIn extension methods for NHibernate 3 Linq Provider Extend NHibernate-LINQ for Regex-Matching Custom LINQ Extensions for NHibernate【讨论】:
你的第一个和第五个链接是一样的。也许你愿意为你的第一个链接到fabiomaulo.blogspot.fr/2010/07/…。并且您可能希望将weblogs.asp.net/ricardoperes/… 添加到您的列表中,这是添加一些 SQL 函数支持的最简单的方法。 @Frédéric 谢谢。你说得对。修复了链接并添加了新的“NHibernate 的自定义 LINQ 扩展”链接。【参考方案2】:在 NHibernate v3.3.3 中,支持 String.Compare。 Where
表达式中的String.Compare(MyProp, "value") > 0
会产生类似于where MyProp > 'value'
的sql。
【讨论】:
【参考方案3】:使用这样的查询,您可以通过简单地使用大于 (>) 或小于 (
var listka =
from i in FakturyZakupu.Queryable
where i.REJESTRY.REJ_KOD > sbWartoscBetween1.ToString() &&
i.REJESTRY.REJ_KOD < sbWartoscBetween2.ToString()
select i;
您的成功可能取决于您的数据库对字符串比较的解释,但通常应该可以正常工作。
【讨论】:
运算符 '>' 不能应用于“字符串”和“字符串”类型的操作数以上是关于不支持 linq to nhibernate compareto的主要内容,如果未能解决你的问题,请参考以下文章
LINQ to NHibernate - 如何检测失败的翻译
有利于启动; Linq to SQL 还是 Nhibernate?