1

我有 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 between a and b ?

4

3 回答 3

4

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

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

于 2012-07-13T10:58:10.627 回答
0

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

于 2014-03-03T16:21:15.057 回答
-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;

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

于 2013-08-27T16:40:12.717 回答