Ill*_*ati 2 nhibernate join criteria queryover
但这个问题在两个地方都没有得到妥善解答,所以我不得不再问:(
问题是,当它们之间没有可用的映射时,您可以使用Criteria API来连接两个表.
例如
class Order{ UserId , OrderId}
class User{UserId , UserName}
Run Code Online (Sandbox Code Playgroud)
我需要生成一个查询,如,
select user.UserName , order.OrderId from Order order join User user on order.UserId = user.UserId
Run Code Online (Sandbox Code Playgroud)
如果有人知道这一点,请帮助..请注意我需要使用Criteria或QueryOver技术
谢谢/ BB
这是一个关于它如何完成的想法,但它有点难看.
由于映射没有说明Order和User之间的关系存在,因此很难让NHibernate在这两个表之间生成连接.你可以做的是做一个内部选择,所以你的SQL查询看起来像这样:
SELECT o.OrderId, o.WhateverOtherPropertyNameFromOrder
(SELECT u.UserName, u.WhateverOtherPropertyNameFromUser
FROM User u
WHERE u.UserId = o.UserId)
FROM Order o
Run Code Online (Sandbox Code Playgroud)
这可以在QueryOver上这样完成:
Order order = null;
User user = null;
QueryOver<User> query = QueryOver.Of<User>(() => user)
.Select(Projections.ProjectionList()
.Add(Projections.Property<User>(x => x.UserName)))
.Add(Projections.Property<User>(x => x.WhateverOtherPropertyNameFromUser)))
.Where(Restrictions.EqProperty("user.Id", "order.UserId"));
var result = session.QueryOver<Order>(() => order)
.Select(Projections.ProjectionList()
.Add(Projections.Property<Order>(c => c.OrderId))
.Add(Projections.Property<Order>(c => c.WhateverOtherPropertyNameFromOrder))
.Add(Projections.SubQuery(query)))
.List<object[]>();
Run Code Online (Sandbox Code Playgroud)
我不知道这对你是否有用,但它是你问题的潜在解决方案.
| 归档时间: |
|
| 查看次数: |
6008 次 |
| 最近记录: |