我正在尝试总结一组中所有部分的成本。
我的Total,TotalLength,Loss和CutPart按预期工作。
当我总结组中所有部件的成本时,我没有得到预期的结果。
一切都计算得很好但不是总和/成本
- 这是我在分组的地方
List<PartsProcessor.IPart> parts = Task.Run(async () => await this.ProcessedParts.CombineParts(false)).Result;
//Stocks
this.StockLengths = parts.GroupBy(o => new { o.PartNumber, o.StockLength }).Select(g => new PartsProcessor.GroupedPart
{
Total = (g.Key.StockLength > 0 ? int.Parse((Math.Ceiling(g.Sum(s => s.Length) / (g.Key.StockLength))).ToString()) : 1),
TotalLength = g.Sum(s => s.Length),
Loss = g.Key.StockLength > 0 ? (g.Key.StockLength * (Math.Ceiling(g.Sum(s => s.Length) / (g.Key.StockLength)))) - (g.Sum(s => s.Length)) : 0,
**Cost = g.Sum(s => s.Cost),**
CutPart = g.FirstOrDefault()
}
)
.Where(w => w.CutPart.Category.ToLower() != "glass" &&
w.CutPart.Category.ToLower() != "glazing" &&
!w.CutPart.Category.ToLower().Contains("epdm") &&
!w.CutPart.Category.ToLower().Contains("end dam") &&
w.CutPart.Category.ToLower() != "leaf" &&
w.CutPart.Category.ToLower() != "door frame").ToList<PartsProcessor.IGroupedPart>();
- 调试模式下的属性
在下面的两个快照中,它显示了每个的成本,所需的总零件数和总成本。但总费用不正确。
我在哪里错了?
答案 0 :(得分:4)
根据评论回复您的请求我提供了以下代码段:
from w in parts
where Filter(w)
group w by new { w.PartNumber, w.StockLength } into g
let someValue = int.Parse((Math.Ceiling(g.Sum(s => s.Length)/(g.Key.StockLength))).ToString())
select new
{
Total = g.Key.StockLength > 0 ? someValue : 1,
TotalLength = g.Sum(s => s.Length),
Loss = g.Key.StockLength > 0 ? someValue - (g.Sum(s => s.Length)) : 0,
Cost = (g.Key.StockLength > 0 ? someValue : 1)*g.Average(s => s.Cost),
CutPart = g.FirstOrDefault(),
};
您可以根据需要重复使用someValue
。
答案 1 :(得分:2)
我让它使用下面的代码。移动where和groupby没有帮助。由于平均值总是相同的,所以我能够像下面那样编写代码。
this.StockLengths = parts
.Where(w => w.Category.ToLower() != "glass" &&
w.Category.ToLower() != "glazing" &&
!w.Category.ToLower().Contains("epdm") &&
!w.Category.ToLower().Contains("end dam") &&
w.Category.ToLower() != "leaf" &&
w.Category.ToLower() != "door frame")
.GroupBy(o => new { o.PartNumber, o.StockLength }).Select(g => new PartsProcessor.GroupedPart
{
Total = (g.Key.StockLength > 0 ? int.Parse((Math.Ceiling(g.Sum(s => s.Length) / (g.Key.StockLength))).ToString()) : 1),
TotalLength = g.Sum(s => s.Length),
Loss = g.Key.StockLength > 0 ? (g.Key.StockLength * (Math.Ceiling(g.Sum(s => s.Length) / (g.Key.StockLength)))) - (g.Sum(s => s.Length)) : 0,
Cost = (g.Key.StockLength > 0 ? int.Parse((Math.Ceiling(g.Sum(s => s.Length) / (g.Key.StockLength))).ToString()) : 1) * g.Average(s => s.Cost),
CutPart = g.FirstOrDefault()
}
).ToList<PartsProcessor.IGroupedPart>();