gpt4 book ai didi

NHibernate QueryOver 选择实体和聚合

转载 作者:行者123 更新时间:2023-12-03 17:50:46 25 4
gpt4 key购买 nike

我想要做的是显示一个简单的数据网格,其中包含实体数据及其子项的聚合数据。例如,让我们使用订单和订单项。我想显示订单信息和订单项的数量。

订单 ID、订单日期、NumOfLineItems

现在通常在 SQL 中,您可以通过多种方式执行此操作。但这是我能想到的在翻译到 NHibernate 时可能有效的唯一方法。

SELECT o.OrderID, OrderDate, NumOfLineItems
FROM #Orders o
INNER JOIN
(SELECT o2.OrderID, COUNT(*) As NumOfLineItems FROM #LineItems l
INNER JOIN #Orders o2 ON o2.OrderID = l.OrderID
WHERE UserID = 1 GROUP BY o2.OrderID) t1 ON o.OrderID = t1.OrderID
WHERE UserID = 1

我知道还有其他方法,但我正在尝试考虑 NHibernate 允许我使用 QueryOver 语法的方法。我不想使用派生列。我试图避免编写 SQL。

对于我的实体,我有一个 Order 实体和一个 AggregatedOrder 实体,在本例中将是我的 DTO,我计划使用转换器 aliastobean 将数据复制到其中。

我只是完全不知道如何解决这个问题。

到目前为止我所拥有的:
        QueryOver<LineItem> x = QueryOver.Of<LineItem>()
.SelectList(p => p .SelectCount(l => l.Id).WithAlias(() => itemAlias.NumOfLineItems))
.JoinQueryOver<Order>(l => l.Order)
.Where(o => o.UserID == userID)


var y = session.QueryOver<Listing>()
.JoinQueryOver<Bid>(x); // no idea whats going on here

最佳答案

鉴于:

public class Order
{
public virtual int OrderId {get; set;}
public virtual DateTime OrderDate {get; set;}
public virtual IList<LineItem> LineItems {get; set;}
}
public class LineItem
{
public virtual int Id {get; set;}
public virtual string Description {get; set;}
}

要使用 QueryOver API 查询 Order + Aggregated LineItem 的投影,您可以执行以下操作:
OrderDto orderDto = null;
LineItem items = null;
var results = session.QueryOver<Order>()
.JoinAlias(o => o.LineItems, () => items)
.Select(Projections.ProjectionList()
.Add(Projections.Property<Order>(o=>o.Id).WithAlias(()=>orderDto.OrderId))
.Add(Projections.Property<Order>(o=>o.DateOrdered).WithAlias(()=>orderDto.DateOrdered))
.Add(Projections.Count(()=> items.Id).WithAlias(()=>orderDto.ItemCount))
)
.TransformUsing(Transformers.AliasToBean<OrderDto>())
.List<OrderDto>();

关于NHibernate QueryOver 选择实体和聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com