代码之家  ›  专栏  ›  技术社区  ›  YMC

无法在Nhb 4中构建只有特定字段可供选择的2个表联接

  •  0
  • YMC  · 技术社区  · 6 年前

    我尝试使用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))
    

    构建查询或类似查询的正确方法是什么?“Select”操作符出现问题,“Where”部分工作正常。我还可以通过这两个彼此独立的实体构建非连接查询,它工作得很好,但不知道如何连接它们

    1 回复  |  直到 6 年前
        1
  •  0
  •   YMC    6 年前

    最后,我想出了如何让它工作:

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