2010-01-27 47 views
0

請有人能用英文解釋下面的代碼是做什麼的?瞭解NHibernate的ICriteria

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) 

它看起來像它試圖找到基於他們的用戶ID給定用戶的所有位置。

Subqueries.PropertyIn正在運行「內部選擇」。
SetProjection返回可能列的一個子集。
限制用於構建WHERE子句。
DetachedCriteria和CreateCriteria用於構建SELECT語句。
最後的列表運行查詢並返回給定類型的對象列表。

相關問題