【问题标题】:Linq-to-NHibernate String/DateTime Conversion in WhereLinq 到 NHibernate 字符串/日期时间转换在哪里
【发布时间】:2010-01-19 08:30:15
【问题描述】:

我刚开始使用 Linq to NHibernate,并且遇到了一个非常简单的查询问题。我有一个定义为 varchar 的数据库列。在 linq 查询中,我需要将该值与日期时间值进行比较(存储在 varchar 列中的所有值都是有效日期)。我正在尝试这个:

var list = (from o in session.Linq<ObjectName>() where Convert.ToDateTime(o.ColumnName) >= startDate select o).ToList();

使用 Convert.ToDateTime 时出现此异常:

不能在没有投影的条件上使用子查询。

at NHibernate.Criterion.SubqueryExpression.ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary`2 enabledFilters)
at NHibernate.Criterion.Junction.ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary`2 enabledFilters)
at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetWhereCondition(IDictionary`2 enabledFilters)
at NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor(IOuterJoinLoadable persister, CriteriaQueryTranslator translator, ISessionFactoryImplementor factory, ICriteria criteria, String rootEntityName, IDictionary`2 enabledFilters)
at NHibernate.Loader.Criteria.CriteriaLoader..ctor(IOuterJoinLoadable persister, ISessionFactoryImplementor factory, CriteriaImpl rootCriteria, String rootEntityName, IDictionary`2 enabledFilters)
at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results)
at NHibernate.Impl.CriteriaImpl.List(IList results)   
at NHibernate.Impl.CriteriaImpl.List()
at NHibernate.Linq.CriteriaResultReader`1.List()   
at NHibernate.Linq.CriteriaResultReader`1.<GetEnumerator>d__0.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)   
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)

这是 1.0.0.4000 的 NHibernate.Linq。

【问题讨论】:

    标签: nhibernate linq-to-nhibernate


    【解决方案1】:

    我会尝试将您的 varchar 列映射为 DateTime,实现 IUserType 来进行转换。我不知道您实际上是如何存储 DateTime 的(即什么表示形式),但请记住,数据库必须能够以两个日期时间比较的相同方式比较它们。例如,ISO-8601 表示的日期可以做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多