向Linq查询添加更多参数

时间:2014-04-08 09:25:01

标签: c# .net linq

我使用此查询按日期计算订单数量。我尝试添加一个参数来计算每个订单的总产品数量,但是我无法让它在atm工作。

这是一个方法的基本部分,用于返回3个参数(Date,TotalOrders和TotalProducts)的列表。我使用Linq查询获取每个日期的总订单列表,我想知道如何将我的第三个参数添加到列表" TotalProducts"如果我可以通过在查询中再添加一个搜索参数来完成。下面的foreach部分不能正常工作,它将返回TotalProducts列表,但CreationDate对于列表中的ech项目将是相同的。我也有一种感觉,将foreach放在foreach dosn中似乎是最佳选择:

 var orders = _orderService.SearchOrderStatistics(startDateValue, endDateValue, orderStatus,
                paymentStatus, shippingStatus, model.CustomerEmail, model.OrderGuid);


            var result = orders.Where(o => o.PaymentStatus == PaymentStatus.Paid)
                    .GroupBy(g => g.CreatedOnUtc.Date.ToString("yyyyMMdd"))
                    .Select(s => new { Date = s.Key, Count = s.Count() });



            List<GCOrdersModel> TotalOrdersPaid = new List<GCOrdersModel>();


               foreach (var g in result)
                    {

                        foreach (var opv in orders)
                        {
                            GCOrdersModel _Om = new GCOrdersModel(g.Date, g.Count.ToString(), opv.OrderProductVariants.Count.ToString());

                            TotalOrdersPaid.Add(_Om);

                        }

                    }

            return TotalOrdersPaid;

要访问每个订单的总产品,我必须使用OrderProductVariants.Count.ToString()

我可以将此参数添加到查询中吗?

THX

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

return orders.Where(o => o.PaymentStatus == PaymentStatus.Paid)
             .GroupBy(g => g.CreatedOnUtc.Date.ToString("yyyyMMdd"))
             .Select(s => new GCOrdersModel() 
                          { 
                              Date = s.Key, 
                              Count = s.Count(),
                              OpvCount = opv.OrderProductVariants.Count.ToString()
                          })
             .ToList();

return orders.Where(o => o.PaymentStatus == PaymentStatus.Paid)
             .GroupBy(g => g.CreatedOnUtc.Date.ToString("yyyyMMdd"))
             .Select(s => new GCOrdersModel(s.Key, s.Count, opv.OrderProductVariants.Count.ToString()))
             .ToList();

这样,你就不必再次迭代你的结果了。它会自动创建您的GCOrdersModel

列表

修改

这有用吗?

return orders.Where(o => o.PaymentStatus == PaymentStatus.Paid)
                 .GroupBy(g => g.CreatedOnUtc.Date.ToString("yyyyMMdd"))
                 .Select(s => new GCOrdersModel() 
                              { 
                                  Date = s.Key, 
                                  Count = s.Count(),
                                  OpvCount = s.OrderProductVariants.Count.ToString()
                              })
                 .ToList();

return orders.Where(o => o.PaymentStatus == PaymentStatus.Paid)
                 .GroupBy(g => g.CreatedOnUtc.Date.ToString("yyyyMMdd"))
                 .Select(s => new GCOrdersModel(s.Key, s.Count(), s.OrderProductVariants.Count.ToString()))
                 .ToList();

答案 1 :(得分:0)

怎么样:

var opvCount =
    opv
        .OrderProductVariants
        .Count
        .ToString();

return
    orders
        .Where(o => o.PaymentStatus == PaymentStatus.Paid)
        .GroupBy(g => g.CreatedOnUtc.Date.ToString("yyyyMMdd"))
        .Select(s => new
        {
            Date = s.Key,
            Count = s.Count()
        })
        .Select(x =>
            new GCOrdersModelg(x.Date, g.Count.ToString(), opvCount));