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 的任何名称)不是集合(例如 IEnumerable
、IQueryable
等) , 所以 .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.
数组的标量来说确实有点过分了
我写了下面的代码,我想在其中计算价格的总和。 但它说没有总和的定义。可能有什么问题?
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 的任何名称)不是集合(例如 IEnumerable
、IQueryable
等) , 所以 .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.
数组的标量来说确实有点过分了