我需要根据数据库中的其他数据为用户选择产品。 如果数据在数据库中被过滤掉,则需要将较少的数据发送到服务器。
用户(Id) 产品代码) 访问(User_Id,代码)//将用户与目标代码匹配
此查询是否会在数据库上执行回送最小数据的数据?
var products = QueryOver.Of<Access>()
.Where(a => a.User_Id == User.Id())
.Select(Projections.Property<Acces>(a => a.Code));
var access = QueryOver.Of<Product>()
.WithSubquery.WhereProperty(h => h.Code)
.In(products)
.Future();
答案 0 :(得分:1)
这是如何过滤数据的非常合理的方法。您的查询结果看起来像是对数据库的一个SELECT:
SELECT ...
FROM Product
WHERE Code IN (SELECT Code FROM Access WHERE UserId = @userId)
因此,这肯定会在数据库服务器上执行,转移的数据会减少,而且还会允许您执行正确的分页(如果需要) - 这种情况是如何过滤parent
关于one-to-many
关系的方法(找到孩子有的父母......)
也许请查看这些Join several queries to optimise QueryOver query,NHibernate QueryOver - Retrieve all, and mark the ones already "selected"