2010-01-13 28 views
0

我剛剛開始與Linq NHibernate和麻煩與一個非常簡單的查詢。我有一個定義爲varchar的數據庫列。在linq查詢中,我需要將該值與日期時間值進行比較(所有存儲在varchar列中的值均爲有效日期)。我想這樣的:Linq到NHibernate字符串/日期時間轉換在哪裏

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。

回答

1

我會嘗試將您的varchar列映射爲DateTime,實現IUserType來執行轉換。我不知道你是如何實際存儲DateTime(即什麼表示),但請記住,數據庫必須能夠以兩種日期時間相同的方式進行比較。例如,代表日期的ISO-8601可以做到這一點。

+0

工作。謝謝您的幫助。 – Jeff 2010-01-20 16:32:36

相關問題