在字符串 属性 上搜索不等式

Search with inequalities on string property

我们在 SQL 服务器和 SQLite 上使用 NHibernate。 数据库以行而不是列的形式存储记录——每行有 Path|Value 作为列。路径和值都是 string 属性。

对于 Path 的某些值,我们想查询不等式——大于、小于等。

我们遇到的麻烦是,因为属性是字符串,所以不等式使用字符串比较——例如,搜索 Value >= 18 returns 行,其中 Value = 5。不幸的是,我们在解决这个问题时遇到了问题。

1) 此限制产生不正确的结果(说 18 < 5):

Restrictions.Ge("Value", item.Value);

2) 我们尝试将值转换为整数,但是这段代码从 NHibernate 生成了一个 SqlException -- Error converting data type nvarchar to bigint.

Restrictions.Le(Projections.Cast(NHibernateUtil.Int64, Projections.Property("SearchString")), item.Value)

3) 我们正在寻找一种方法来用零填充 属性 值(以便我们得到 018 > 005),但在 NHibernate 中找不到这样做的方法。

有人有什么建议吗?
提前致谢!

假设您要比较整数值,IQueryOver:

1) This restriction produces incorrect results (saying 18 < 5):

Restrictions.Ge("Value", item.Value);

Restrictions.Ge
    (
    Projections.Cast(NHibernateUtil.Int32, Projections.Property<YourEntity>(x => x.YourProperty))
        , intValue
    )

相应地转换您的数据类型。如果您的 C# 数据类型 (intValue) 已经是数字,则无需转换它。如果你的 x.YourProperty 已经是数字类型,就不需要转换了。相应地调整上面的代码。

2) We tried casting the value to an integer, but this code produces a SqlException from NHibernate -- Error converting data type nvarchar to bigint.

Restrictions.Le(Projections.Cast(NHibernateUtil.Int64, Projections.Property("SearchString")), item.Value)

参考上面,检查item.Value的数据类型。