我尝试使用Nhibernate v.4:
运行这样的查询Select o.Number, c.Address
From Order o join Client c on o.ClientId = c.Id
Where c.Name = "John"
使用JoinQueryOver和JoinAlias尝试了很多方法,但没有任何帮助,最终导致错误"无法解析属性:订单地址"
Session.QueryOver<Order>()
.JoinQueryOver(s => s.Client)
.Where(() => c.Name == "John")
.SelectList(x => .Select(Projections.Property<Order>(o => o.Number)
.SelectList(x => .Select(Projections.Property<Order>(o => o.Client.Address))
或者像这样
...
.SelectList(x => .Select(Projections.Property<Order>(o => o.Number)
.SelectList(x => .Select(Projections.Property<Client>(c => c.Address))
构建查询的正确方法是什么,或者类似的东西是什么?问题&#39;选择&#39;运营商,&#39;哪里&#39;部分工作正常。我也可以通过这两个彼此分开的实体构建非连接查询,它运行良好,但不知道如何加入它们
答案 0 :(得分:0)
最后,我已经弄明白了如何让它发挥作用:
Client client = null;
OrderClientDto dto = null;
var result = Session.QueryOver<Order>()
.JoinAlias(o => o.Client, () => client)
.Where(() => c.Name == "John")
.SelectList(x => x
.Select(o => o.Number).WithAlias(() => dto.Number)
.Select(() => o.Client.Address).WithAlias(() => dto.Address))
.TransformUsing(Transformers.AliasToBean<OrderClientDto>())
.List<OrderClientDto>();
Nhb远非直观和方便。在EF中编写相同的查询要容易得多。