无法在 Nhb 4 中构建 2 个表 JOIN,仅包含某些字段可供选择
Posted
技术标签:
【中文标题】无法在 Nhb 4 中构建 2 个表 JOIN,仅包含某些字段可供选择【英文标题】:Can't build 2 tables JOIN with only certain fields to select in Nhb 4 【发布时间】:2018-03-29 20:24:26 【问题描述】:我尝试使用 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))
构建查询或类似内容的正确方法是什么? “选择”运算符存在问题,“位置”部分工作正常。我还可以通过这两个彼此分开的实体构建非连接查询,效果很好,但不知道如何连接它们
【问题讨论】:
【参考方案1】:我终于想出了如何让它发挥作用:
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 中编写相同的查询要容易得多。
【讨论】:
以上是关于无法在 Nhb 4 中构建 2 个表 JOIN,仅包含某些字段可供选择的主要内容,如果未能解决你的问题,请参考以下文章