sam*_*amy 4 nhibernate subquery left-join
更新需要2
这是我正在使用的两个查询(在两个查询中都省略了分页)
我想得到以下查询
SELECT *
FROM product
LEFT OUTER JOIN
(
SELECT *
FROM Cart
LEFT OUTER JOIN
cartproducts
ON Cart.Id = cartproducts.Cart_id
WHERE Cart.username = 'user'
)
AS CartFiltered
ON product.Id = CartFiltered.product_id
Run Code Online (Sandbox Code Playgroud)
但我似乎总是得到
SELECT *
FROM product
LEFT OUTER JOIN
cartproducts
ON product.Id = cartproducts.Product_id
LEFT OUTER JOIN
Cart
ON
cartproducts.cart_id = cart.id
WHERE Cart.username = 'user'
Run Code Online (Sandbox Code Playgroud)
我如何设法创建第一种查询?我希望我的问题更清楚:)缺乏清晰度有时候是我的大敌:p
更新:
FWIW,我仍然没有找到答案,我正在加载分页产品数据和整个购物车以显示正确的对象.原始解决方案,但它的工作原理,它击败了我一直试图让Criteria API认识我作为它的主人的组合.如果有人碰巧指出我正确的方向,我会很感兴趣;)
你好,
我很难在Criteria API中编写以下查询,我真的没有看到如何做到这一点:我希望有些人可以提供帮助.
在数据库上,我有产品.这些产品可以在许多推车(每个用户一个推车),每个推车可以包含许多产品,所以我们有很多关系.我想显示每个产品的列表,旁边还有一个小图标,告知用户该特定产品已经在购物车中.我做的是我向NHibernate询问我的产品,并在购物车所有者过滤的推车上做左外连接.
Dim critPage As ICriteria = Session.CreateCriteria(GetType(Product)) _
.SetFirstResult(pageNumber * itemsPerPage).SetMaxResults(itemsPerPage) _
.CreateCriteria("Carts", "c", SqlCommand.JoinType.LeftOuterJoin) _
.SetProjection(plist) _
.SetResultTransformer(New TypedResultTransformer(Of ProductWithCartInfo)) _
.Add(Expression.Eq("c.User", username))
Run Code Online (Sandbox Code Playgroud)
投影列表用于将列数减少到ProductWithCartInfo类的有趣位置.它仅包含属性预测.
问题是,通过此查询,购物车过滤将应用于整个结果集,并且我看不到每个产品都存在于用户的购物车中,而是用户购物车中的每个产品.
是否可以使用Nhibernate中的Criteria API在子查询上执行左外连接?有关信息,我希望尽可能将其保留在Criteria API中.谢谢
我不确定我是否会继续关注您的问题,但这听起来与我遇到的问题非常相似.我似乎当你有NHibernate的嵌套(子)criteira时你松了一些控件.我能够解决我的问题但是使用表格别名而不是使用嵌套的criteira.
可能会尝试......
criteria.CreateAlias("Cart", "Cart", JoinType.LeftOuterJoin);
Run Code Online (Sandbox Code Playgroud)
然后你的购物车上的过滤器必须是OR条件
ICriterion cartCriterion = Restrictions.Eq("Cart.User", username);
customerCriterion = Restrictions.Or(customerCriterion, Restrictions.IsNull("Cart.User"));
criteria.Add(customerCriterion);
Run Code Online (Sandbox Code Playgroud)
让我知道,如果这有助于你...如果不是......也许发布你上面的标准正在生成的SQL以及它需要改变的地方.
祝好运
| 归档时间: |
|
| 查看次数: |
8237 次 |
| 最近记录: |