我写了以下代码,其中我想计算价格的总和。 但它没有说明总和。什么可能是错的?
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();
}
答案 0 :(得分:2)
单个OrderItem
(或获取的类的名称来自存储库)不是集合(例如IEnumerable
,IQueryable
等),因此{{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)
虽然将标量作为类的数组返回似乎有点过分。