NHibernate linq扩展命令子对象集合

时间:2012-10-15 20:38:27

标签: c# database linq nhibernate

我正在尝试使用NH Linq扩展来查询我的数据库,这就是我被困住的地方:

我有一个Customer对象,它有一个Order类型的属性,Order有一个ICollection<Orderline>集合,最后Orderline个对象有一个int类型的属性称为“price”。我想要做的是,给定customerId,我应该获得所有客户信息(订单和订单行),Orderline对象的集合应该由Orderline's价格属性订购。为清楚起见,我遗漏了所有其他细节。

注意:在这种情况下,CustomerOrder之间的关系为1 to 1。客户只能有1个订单,Order可能包含许多Orderlines,您可以从集合类型中推断出来。

非常感谢任何帮助...

1 个答案:

答案 0 :(得分:1)

var query = from customer in session.Query<Customer>()
            let order = customer.Order
            from orderline in order.Orderlines
            orderby orderlines.price
            select new
            {
                CustomerId = customer.Id,
                CustomerName = customer.Name,
                OrderId = order.Id,
                OrderLineId = orderline.Id,
                Price = orderline.Price,
            };

var results = query.ToLookup(a => a.CustomerId)
    .Select(g => new CustomerDto
    {
        Id = g.Key,
        CustomerName = g.First().CustomerName,
        OrderLines =  g.Select(a => new OrderLineDto(a.OrderLineId, a.Price)).ToList()
    }).ToList();