nhibernate与数据库上的子查询

时间:2013-12-11 15:54:07

标签: c# nhibernate

我需要根据数据库中的其他数据为用户选择产品。 如果数据在数据库中被过滤掉,则需要将较少的数据发送到服务器。

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

1 个答案:

答案 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 queryNHibernate QueryOver - Retrieve all, and mark the ones already "selected"