我需要创建一个循环,遍历列表中的所有对象并提取特定索引的值并返回具有总量的Int。 我将尽可能地尽力解释。
public class CostEachActivity
{
public string activityID { get; set; }
public int accountNr { get; set; }
public int amount { get; set; }
}
这是我的类,列表包含来自的对象。
我将发送一串activityID
,我必须从所有帐户返回总费用。
这是包含所有对象的列表(计数为5个大气压)
List<CostEachActivity> dka = new List<CostEachActivity>();
编辑:这是工作方法。
int sum = 0;
List<CostEachActivity> templist = new List<CostEachActivity>();
foreach (CostEachActivity cea in dka)
{
if (cea.activityID == activityID)
templist.Add(cea);
}
foreach(var item in tempList)
{
sum += item.Amount;
}
答案 0 :(得分:1)
如果我做对了你可以做类似的事情:
public int GetSum(string activityId)
{
return dka.Where(cea => cea.activityId == activityId).Sum(cea => cea.amount)
}
或者使用新的C#6.0 Expression-bodied函数成员:
public int GetSome(string activityId) =>
dka.Where(cea => cea.activityId == activityId)
.Sum(cea => cea.amount);
答案 1 :(得分:1)
问题
除了不编译之外,你的内循环应该在主循环之外。找到你想要加总的所有项目后(或以不同的方式找到匹配的项目时已经加总。
此外,看到您在{}
之后打开if
并嵌套了第二个foreach
- 该范围适用于每个项目。您if
语句,如果返回true
将执行tempList
的添加,那么,无论if
发生什么,第二个foreach
都会发生
if (cea.activityID == activityID) // If this is true
templist.Add(cea); // Then this executes
{ // And this happens in any case
foreach (cea.amount = sum + amount)
}
可能的解决方案
按照您开始的方式进行:
int sum = 0;
List<CostEachActivity> templist = new List<CostEachActivity>();
foreach (CostEachActivity cea in dka)
{
if (cea.activityID == activityID)
templist.Add(cea);
}
foreach(var item in tempList)
{
sum += item.Amount;
}
随时对值求和:
int sum = 0;
foreach (CostEachActivity cea in dka)
{
if (cea.activityID == activityID)
sum += cea.Amount;
}
IMO最好的方法:使用linq你可以这样做:
var sum = dka.Where(item => item.activityID == activityID)
.Sum(item => item.amount);
答案 2 :(得分:1)
使用Linq
public int GetSum(string activityID)
{
return dka.Where(d => d.activityID == activityID).Sum(d => d.amount);
}