NHibernate Linq在iquerable上使用Between子句

本文关键字:Between 子句 Linq iquerable NHibernate | 更新日期: 2023-09-27 18:09:21

我想从ENTITY读取记录,其中字段VarCharDate两个用户输入日期之间。如果我直接执行sql,它会成功返回两个日期之间的所有记录。

SELECT * FROM ENTITY WHERE VarCharDate BETWEEN '2010-09-01' AND '2012-08-01' 

这里的VarCharDate字段是预定义的VARCHAR类型,我不能将其更改为DateTime。日期格式固定为'YYYY-MM-DD'用于存储该字段中的值。

问题:

编辑:我使用FluentNhibernate映射实体。我还通过配置在应用程序启动时构建模式。

我正在使用Nhibernate Linq在我的c#应用程序中检索记录。我试过这样写:

session.Query<ENTITY>()
            .Where(e=> 
               Convert.ToDateTime(e.VarCharDate) >= Convert.ToDateTime(loInputDateString) &&
               Convert.ToDateTime(e.VarCharDate) <= Convert.ToDateTime(hiInputDateString)
             ).ToList();

执行上述语句会导致运行时错误NotSupportedException。

谷歌显示关于ExtensionMethods的结果,我发现这一切都令人困惑,所以无法实现它。

我怎样才能做到:

session.Query<ENTITY>(e=> e.VarCharDate.Between(loInputDateString,hiInputDateString)).ToList();

我也尝试了链接中提到的一些东西LINQ Between算子

NHibernate Linq在iquerable上使用Between子句

你没有提到你如何映射你的实体(HBM, FluentNHibernate,…)。但是你可以使用TypeConverter。如果有可能改变VarCharDate属性在你的类的定义,然后改变它为DateTime和让NHibernate从字符串转换为DateTime和返回