linq中没有Sum的定义

No definition of Sum in linq

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

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();
    }

我也附上错误的截图。

单个 OrderItem(或从存储库中获得的 class 的任何名称)不是集合(例如 IEnumerableIQueryable 等) , 所以 .Sum 无法应用。

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

不幸的是,lambda 参数名称的选择.. 更清楚的是:

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

既然您想 return 一个简单的标量值(总计),为什么不将方法签名更改为:

public virtual decimal DesignWiseSplits(int customerId)

然后

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

(或者我猜 return 一个 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);
   }
};

尽管这对于 return 作为 class.

数组的标量来说确实有点过分了