无法构建2个表JOIN,仅在Nhb 4中选择某些字段

时间:2018-03-29 20:24:27

标签: nhibernate

我尝试使用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;部分工作正常。我也可以通过这两个彼此分开的实体构建非连接查询,它运行良好,但不知道如何加入它们

1 个答案:

答案 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中编写相同的查询要容易得多。