J'ai des problèmes avec une requête nHibernate. J'ai un db qui stocke des informations sur le véhicule, et l'utilisateur est capable de rechercher le db par marque, le modèle, le type et les dates de production. Marque, modèle & recherche de type est très bien, fonctionne un régal, ce sont les dates de productions que j'ai des problèmes avec. Alors voilà ...Opérations mathématiques dans nHibernate Criteria Query
Les dates sont stockées en tant qu'ints (StartMonth, StartYear, FinishMonth, FinishYear), lorsque l'utilisateur final sélectionne une date à laquelle il est passé à la requête par ex. 2010006 (2010 * 100 + 6).
ci-dessous fait partie de la requête que j'utilise, FYI J'utilise Lambda Extensions.
if (_searchCriteria.ProductionStart > 0)
{
query.Add<Engine>(e => ((e.StartYear * 100) + e.StartMonth) >= _searchCriteria.ProductionStart);
}
if (_searchCriteria.ProductionEnd > 0)
{
query.Add<Engine>(e => ((e.FinishYear * 100) + e.FinishMonth) <= _searchCriteria.ProductionEnd);
}
Mais lorsque la requête est exécutée, je reçois le message suivant,
Impossible de déterminer le membre de ((e.StartYear * 100) + e.StartMonth)
Toute aide serait grande,
Cordialement
Rich
Merci Stefan, j'endede avec le code suivant, query.Add ( Restrictions.Or ( Restrictions.And ( SqlExpression.CriterionFor (e => e.StartMonth > = mois), SqlExpression.CriterionFor (e => e.StartYear> = année) ), SqlExpression.CriterionFor (e => e.StartYear> = année) ) ); Bien qu'il ne soit pas étanche. J'ai essayé une recherche où la date d'arrivée était 199602 et un enregistrement avec une date de fin de 199604 a été retourné. –
cont, Idéalement, je voudrais pouvoir construire une instruction nHibernate qui générerait alors la clause SQL suivante where. OÙ ... et (this_.StartYear * 100 + this_.StartMonth> = 199401) et (this_.FinishYear * 100 + this_.FinishMonth <= 199612) ... Cordialement Rich –
Vous pourriez probablement insérer le SQL natif dans le filtre, ce qui n'est pas très bien, mais produirait ce dont vous avez besoin. –