8
votes

Critères NHibernate API - Comment ajouter une clause pour comparer une date à une autre date moins une valeur

J'essaie de créer un objet de critères à l'aide de NHibernate qui comparera la date1 à date2 moins une valeur. Dans SQL Server, je ferais ceci:

Sélectionnez * à partir de la table où date1

Quelqu'un peut-il dire comment je ferais cela dans NHibernate?

acclamations

Edit

J'aurais dû spécifier cela plus tôt, j'aimerais savoir comment procédez-t-il en utilisant l'API de critères.

Aussi date1 et date2 sont des colonnes sur la table, donc je ne connais donc pas leur valeur avant d'exécuter la requête


7 commentaires

Espérez-vous une solution utilisant les critères API, HQL ou NHIBERNATE.LINQ?


Aussi..'est-ce que le paramètre d'intérêt ici le nombre de jours?


Désolé, j'aurais dû spécifier que je voulais utiliser les critères API


Je ne comprends pas tout à fait pourquoi vous devez utiliser dataadd du tout .. Je ne peux pas simplement calculer la date de manière programmative et comparer à ce sujet? Vous devez être claire ce que vos paramètres sont ici, je pense ...


Malheureusement non. Le problème est que les deux valeurs de date sont des colonnes sur la table de base de données. Je ne sais donc pas la valeur avant d'exécuter la requête. Je ne comparais pas une date déclarée par programmation avec une date dans la base de données, elles sont toutes deux dans la base de données.


J'ai ajouté un exemple de critère pour vous, mais cela n'a pas beaucoup de sens d'utiliser des critères pour cette requête.


Excellent, merci. Je suis heureux que quelqu'un m'a montré comment le faire, mais je suis d'accord que ce n'est pas la solution idéale


3 Réponses :


0
votes

Compte tenu de la quantité minimale d'informations, voici mon estimation:

TimeSpan timespanToSubtract;
var dateToCompare = new DateTime().Subtract(timespanToSubtract);

// using NHibernate.Linq:
var result = Session.Linq<Table>()
                 .Where(t => t.Date1 < dateToCompare)
                 .ToList();

// using HQL
var hql = "from Table t where t.Date1 < :dateToCompare");
var result = Session.CreateQuery(hql)
                 .SetParameter("dateToCompare", dateToCompare)
                 .List<Table>();


1 commentaires

Cela ne travaillerait pas, j'ai peur parce que je ne connais pas la valeur de la date avant d'exécuter la requête comme elles sont toutes les deux colonnes sur la table.



8
votes

Eh bien, exactement de la même manière: -)

HQL: xxx

sql: xxx

critère : xxx

dans tous les cas, .List () exécutera la requête et renvoie une liste d'objets du type spécifié.


0 commentaires

0
votes

Pour ce faire, vous aurez probablement besoin de Créer un dialecte personnalisé < / a> qui enregistre la fonction Daadd et ensuite la projection SQLFunction pour effectuer la requête de critiera.


0 commentaires