在字符串 属性 上搜索不等式
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
的数据类型。
我们在 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
的数据类型。