使用投影的Linq分组查询

4
我想将订单通过客户ID分组,然后将返回的订单(按客户)投影到列表中。您知道我该如何做吗?
 List<OrderGroup> set = OrderRepository.GetAllOrders
     .GroupBy(x => x.CustomerId).Select(result => new OrderGroup
         {
             Orders = ???? //should be all orders from one customer.
         }).ToList();

Linq-to-Sql,Entity Framework,还是其他? - Gert Arnold
3个回答

4
result 是一个 IGrouping<TKey, T>,它本身是一个 IEnumerable<T>,因此您可以这样做:
List<OrderGroup> set = OrderRepository.GetAllOrders
                      .GroupBy(x => x.CustomerId)
                      .Select(result => new OrderGroup
                      {
                          Orders = result.ToList()
                      }).ToList();

(请注意,这假定Orders可分配给List<Order>。)

1
我会像下面这样做。我喜欢选择所需的列,而不是获取全部。
var customerData = (from cd in OrderRepository.GetAllOrders
                     group cd by new { cd.CustomerId, cd.date } into grp
                    select new
                       {
                           customer_name = grp.FirstOrDefault().custname,
                           total_orders = grp.Count(),  
                           amount = grp.Sum(x => x.total_amt_paid)

                       }).ToList();                    


foreach (var data in customerData)
{

}

0
Reed是正确的,不过我认为你也可以使用结果选择器来实现这个功能,像这样:
List<OrderGroup> set = OrderRepository.GetAllOrders
                         .GroupBy(x => x.CustomerId, // key selector
                           x => x, // element selector
                           result => new OrderGroup
                           {
                              Orders = result.ToList()
                           }) // result selector
                         .ToList();

(我面前没有编译器来验证。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接