我有以下foreach循环
//Get the count of the service records (tickets) and display
int t = 1;
decimal Total = 0;
foreach (dtIService_v10_r1.Ticket objTicket in mobjTickets)
{
//All service tickets that are marked "Repair Orders"
if (objTicket.TicketStage_ID == 2)
{
vm.NumberRepOrder = mobjFormat.StripObjectToString(t++);
int x = Convert.ToInt32(vm.NumberRepOrder);
for (int i = 0; i < x; i++)
{
Total += (objTicket.PartSubTotal + objTicket.LaborSubtotal);
}
}
}
vm.RepairCost = mobjFormat.FormatObjectToCurrencyString(Total);
我需要做的是找到每个服务记录的LaborSubtotal + PartSubTotal
,然后显示总数。例如,如果我每张5.00有20张票,则vm.RepairCost
应显示$ 100.00。我从上面的代码得到的只是最终记录总数。
顺便说一句mobjFormat
是我们正在使用的帮手,所以不要担心它不会影响代码。
答案 0 :(得分:2)
此代码中至少存在一个语义错误。尝试通过在循环外移动总结和总计分配来修复:
//Get a) count and b) total cost of the service records (tickets) and display
int CountOfServiceTickets = 0;
decimal Total = 0;
foreach (dtIService_v10_r1.Ticket objTicket in mobjTickets)
{
//All service tickets that are marked "Repair Orders" (2)
if (objTicket.TicketStage_ID == 2)
{
++CountOfServiceTickets;
Total += (objTicket.PartSubTotal + objTicket.LaborSubtotal);
}
}
vm.NumberRepOrder = mobjFormat.StripObjectToString(CountOfServiceTickets);
vm.RepairCost = mobjFormat.FormatObjectToCurrencyString(Total);
在此版本中,我认为vm
是您的“总容器”,如果您在有关x
和vm
范围的问题中添加更多信息,我可能会进行修改,以及NumberRepOrder
的目标是。
我将sTotal重命名为Total,否则它看起来像匈牙利表示法类型不匹配。转换为字符串稍后执行,只有一次,当小数和已知时。
编辑:OP澄清。相应更新。现在,循环计算一个计数和一个故障子集的总成本。它不再试图将分形作为副作用;)
答案 1 :(得分:2)
如果我做对了,你想要的只是获得所有门票的总数。如果这是你真正想要的,那么所有人都需要这样做:
decimal total = mobjTickets.Sum(x => x.PartSubTotal + x.LaborSubtotal);
不需要循环但它需要“使用System.Linq;”指令