0

Linq to NHibernate を使い始めたばかりで、非常に単純なクエリで問題が発生しています。varchar として定義されたデータベース列があります。linq クエリでは、その値を datetime 値と比較する必要があります (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)

これは NHibernate.Linq の 1.0.0.4000 を使用しています。

4

1 に答える 1

1

変換を行うために IUserType を実装して、varchar 列を DateTime としてマッピングしてみます。DateTime を実際にどのように保存しているか (つまり、どのような表現か) はわかりませんが、データベースは 2 つの日時を比較するのと同じ方法でそれらを比較できる必要があることに注意してください。たとえば、ISO-8601 で表された日付はこれを行うことができます。

于 2010-01-19T00:30:15.270 に答える