2010-01-27 7 views
0

S'il vous plaît quelqu'un peut-il expliquer en anglais ce que fait le code suivant?Comprendre ICriteria pour NHibernate

var subCriteria = DetachedCriteria.For<UserLocation>(); 

subCriteria.SetProjection(Projections.Property("LocationId")) 
      .Add(Restrictions.Eq("UserId", userId)); 

return UoW.Session.CreateCriteria(typeof(Location)) 
     .Add(Subqueries.PropertyIn("LocationId", subCriteria)).List<Location>(); 

Répondre

2

Pouvez-vous exécuter le code et regarder le SQL généré par lui?

Je devine que c'est quelque chose d'assez près à ceci:

SELECT * 
FROM Location 
WHERE LocationId IN (SELECT LocationId FROM UserLocation WHERE UserId = @UserId) 

On dirait qu'il essaie de trouver tous les emplacements pour un utilisateur donné en fonction de leur UserId.

Les sous-requêtes.PropertyIn exécutent une "sélection interne".
SetProjection renvoie un sous-ensemble des colonnes possibles.
Des restrictions sont utilisées dans la construction de la clause WHERE. DetectedCriteria et CreateCriteria sont utilisés pour construire des instructions SELECT.
La liste à la fin exécute la requête et renvoie une liste d'objets du type donné.