47 votes

NHibernate avec QueryOver avec WHERE IN

Je créerais un QueryOver comme celui-ci

 SELECT *
FROM Table
WHERE Field IN (1,2,3,4,5)
 

J'ai essayé avec la méthode Contains mais j'ai rencontré l'exception

"System.Exception: Appel de méthode non reconnu: System.String: Boolean Contains (System.String)"

Voici mon code

 var qOver = _HibSession.QueryOver<MyModel>(() => baseModel)                                                                
  .JoinAlias(() => baseModel.Submodels, () => subModels)
  .Where(() => subModels.ID.Contains(IDsSubModels))
  .List<MyModel>();
 

61voto

Faber Points 1145

J'ai trouvé la solution !! :-)

 var qOver = _HibSession.QueryOver<MyModel>(() => baseModel)
    .JoinAlias(() => baseModel.Submodels, () => subModels)
    .Where(Restrictions.In(subModels.ID,IDsSubModels))
    .List<MyModel>();
 

49voto

Artem Points 284

Vous pouvez essayer quelque chose comme ça:

 // if IDsSubModels - array of IDs
var qOver = _HibSession.QueryOver<MyModel>() 
                       .Where(x => x.ID.IsIn(IDsSubModels))
 

Vous n'avez pas besoin d'une jointure dans cette situation

11voto

Arnold Points 71

Cela fonctionne et est plus élégant

 var Strings = new List<string> { "string1", "string2" };

var value = _currentSession
.QueryOver<T>()
.Where(x => x.TProperty == value)
.And(Restrictions.On<T>(y=>y.TProperty).IsIn(Strings))
.OrderBy(x => x.TProperty).Desc.SingleOrDefault();

where T is a Class and TProperty is a property of T
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X