Понимание ICriteria для NHibernate - PullRequest
       10

Понимание ICriteria для NHibernate

0 голосов
/ 27 января 2010

Может кто-нибудь объяснить по-английски, что делает следующий код?

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>();

1 Ответ

2 голосов
/ 27 января 2010

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

Я предполагаю, что это что-то очень похожее на это:

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

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

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

...