2010-01-27 2 views
0

Пожалуйста, может кто-нибудь объяснить на английском языке, что делает следующий код?Понимание ICriteria для 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>(); 

ответ

2

Можете ли вы запустить код и посмотреть на SQL, сгенерированный им?

Я предполагаю, что это что-то очень близко к этому:

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

Похоже, он пытается найти все места для данного пользователя на основе их UserId.

Subqueries.PropertyIn запускает «внутренний выбор».
SetProjection возвращает подмножество возможных столбцов.
Ограничения используются при построении предложения WHERE.
DetachedCriteria и CreateCriteria используются для создания операторов SELECT.
Список в конце запускает запрос и возвращает список объектов данного типа.

Смежные вопросы