了解NHibernate的ICriteria

时间:2010-01-27 00:00:06

标签: 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>();

1 个答案:

答案 0 :(得分:2)

你能运行代码并查看它生成的SQL吗?

我猜这是非常接近的:

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

看起来它正试图根据用户ID找到给定用户的所有位置。

Subqueries.PropertyIn正在运行“内部选择” SetProjection返回可能列的子集 限制用于构建WHERE子句 DetachedCriteria和CreateCriteria用于构建SELECT语句 最后的List运行查询并返回给定类型的对象列表。