2017-05-26 4 views
0

J'ai un scénario que je dois vérifier la liste id de la table avec la liste de chaînes donnée et obtenir toutes les données pertinentes.Je sais comment récupérer les données pour un critère égal.Nhibernate critères égaux

var criteria = sm.Session.CreateCriteria(GetRegisteredType<Data>()); 

criteria = criteria.Add(Expression.Eq("Id", "9999")); 

J'ai une liste de chaînes que je dois vérifier avec la colonne Id. Quelqu'un peut-il m'aider avec ça?

+0

double possible de [requête NHibernate en utilisant des critères pour la liste des types de valeurs] (https://stackoverflow.com/questions/28094096/nhibernate-query-using-criteria-for-list-of-value -type) –

+0

Vous avez votre réponse dans la question ci-dessus liée. Si vous avez besoin de faire cela avec une sous-requête, voir [this] (https://stackoverflow.com/q/30242846/1178314). –

Répondre

1

Supposons que vous avez la liste:

var list = new string[] { "9999", "1111" }; 
  1. Critères

    Session.CreateCriteria(GetRegisteredType<Data>()).Add(Restrictions.InG("Id", list)); 
    
  2. QueryOver

    Session.QueryOver<Data>().Where(x => x.Id.IsIn(list)); 
    
  3. NHibernate.LINQ

    Session.Query<Data>().Where(x => list.Contains(x.Id)) 
    
1

Avez-vous besoin d'utiliser une requête basée sur ICriteria? Dans le cas contraire, une requête basée sur LINQ ressemblerait à quelque chose comme:

var results = 
    sm.Session 
     .Query<Data>() 
     .Where(d => listOfStrings.Contains(d.Id)) 
     .ToList(); 

Toutefois, vous aurez besoin de se méfier de la taille de votre liste de chaînes, car ils seront passés en tant que paramètres et feront l'objet d'un limite.