代码之家  ›  专栏  ›  技术社区  ›  pooja

linq中没有Sum的定义

  •  1
  • pooja  · 技术社区  · 9 年前

    我写了下面的代码,我想在其中计算价格的总和。 但它没有给出和的定义。可能有什么问题?

    public virtual IList<DesignWiseTotal> summary(int customerId)
        {
            var query = _orderItemRepository.Table;
    
            return query.Where(oi => oi.Product.Designer_Id == customerId)
                            .Select(oi => new DesignWiseTotal
                            {
                                GrandTotal = oi.Sum(x => x.PriceExclTax),
                            });
        }
    

    上面的代码和下面的代码非常相似,工作正常。以下代码按捆绳计算和组。我在上面的代码中试图做的是计算一个客户的所有缠绕的总数。

     public virtual IList<DesignWiseTotal> DesignWiseSplits(int customerId)
        {
            var query = _orderItemRepository.Table;
    
            return query.Where(oi => oi.Product.Designer_Id == customerId)
                            .GroupBy(oi => oi.Product.Twine)
                            .Select(oi => new DesignWiseTotal
                            {
                                Total = oi.Sum(x => x.PriceExclTax),
                                Twine = oi.Key,
                                }).ToList();
        }
    

    我也附上了错误的截图。 screenshot

    1 回复  |  直到 9 年前
        1
  •  2
  •   StuartLC    9 年前

    一张单曲 OrderItem (或从存储库中获取的类的名称)不是集合(例如。 IEnumerable , IQueryable 等等),因此 .Sum 无法应用。

    在第二个查询中,您将 Groups 属于 .GroupBy(oi => oi.Product.Twine) 。每个组将具有一个或多个元素,因此 Sum 是允许的

    lambda参数名称的选择很不幸。更清楚的是:

    .GroupBy(oi => oi.Product.Twine)
    .Select(grp => new DesignWiseTotal ...
    

    既然您似乎希望返回一个简单的标量值(Grand Total),为什么不将方法签名更改为:

    public virtual decimal DesignWiseSplits(int customerId)
    

    然后

    return query.Where(oi => oi.Product.Designer_Id == customerId)
                .Sum(oi => oi.PriceExclTax);
    

    (或者我想还一张单曲 DesignWiseTotal 与已筛选客户的总和?)

    (我当然希望 oi.PriceExclTax 为十进制)

    编辑

    如果您保留此签名:

    public virtual IList<DesignWiseTotal> summary(int customerId)
    

    您可以使用:

    return new List<DesignWiseTotal>
    {  
       new DesignWiseTotal
       {
           GrandTotal = query.Where(oi => oi.Product.Designer_Id == customerId)
                             .Sum(oi => oi.PriceExclTax);
       }
    };
    

    尽管将标量作为类的数组返回似乎有些过分。