在linq中没有Sum的定义

时间:2015-07-24 10:41:32

标签: c# sql linq razor nopcommerce

我写了以下代码,其中我想计算价格的总和。 但它没有说明总和。什么可能是错的?

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 个答案:

答案 0 :(得分:2)

单个OrderItem(或获取的类的名称来自存储库)不是集合(例如IEnumerableIQueryable等),因此{{1无法应用。

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

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

Sum

由于您似乎想要返回一个简单的标量值(Grand Total),为什么不将方法签名更改为:

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

然后

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)

虽然将标量作为类的数组返回似乎有点过分。