2010-01-13 4 views
0

Je commence juste avec Linq à NHibernate et j'ai des problèmes avec une requête assez simple. J'ai une colonne de base de données qui est définie comme un varchar. Dans la requête linq, j'ai besoin de comparer cette valeur à une valeur datetime (toutes les valeurs stockées dans la colonne varchar sont des dates valides). J'essaie ceci:Linq-to-NHibernate Conversion de String/DateTime en Où

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

Lorsque vous utilisez Convert.ToDateTime je reçois cette exception:

Impossible d'utiliser les sous-requêtes sur un critère sans projection.

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) 

Ceci est avec 1.0.0.4000 de NHibernate.Linq.

Répondre

1

Je tenterais de mapper votre colonne varchar en tant que DateTime, en implémentant un IUserType pour effectuer la conversion. Je ne sais pas comment vous stockez le DateTime (c'est-à-dire quelle représentation), mais gardez à l'esprit que la base de données doit être capable de les comparer de la même manière que deux datages. Par exemple, les dates représentées ISO-8601 peuvent le faire.

+0

Cela a fonctionné. Merci pour l'aide. – Jeff