在 C# 中使用 ForEach 循环遍历 IEnumerable
本文关键字:循环 遍历 IEnumerable ForEach | 更新日期: 2023-09-27 18:34:44
我正在尝试遍历一个 IEnumerable,但由于某种原因它没有通过 foreach 循环,因为每个 ChartClass 的值都没有被修改。
public IEnumerable<ChartClass> get(string ID, string buildname, string placeholder)
{
var context = new Entities();
var metrics = from c in context.VSTS_CODE_METRICS
where c.BUILD_NAME == buildname && c.OBJECT_TYPE == "Namespace"
group c by c.BUILD_ID into g
select new ChartClass
{
Build_ID = g.Key,
BuildTrim = g.Key,
Index = g.Average(c => c.MAINTAINABILITYINDEX_).Value
};
foreach (var i in metrics)
{
int num = i.BuildTrim.LastIndexOf('_');
i.BuildTrim = "2";
}
return metrics;
}
我正在尝试将每个 ChartClass 的 BuildTrim 字段更改为"2",但由于某种原因没有发生
为什么不在查询中将 BuildTrim 设置为等于"2"?
public IEnumerable<ChartClass> get(string ID, string buildname, string placeholder)
{
var context = new Entities();
var metrics = from c in context.VSTS_CODE_METRICS
where c.BUILD_NAME == buildname && c.OBJECT_TYPE == "Namespace"
group c by c.BUILD_ID into g
select new ChartClass
{
Build_ID = g.Key,
BuildTrim = "2",//g.Key,
Index = g.Average(c => c.MAINTAINABILITYINDEX_).Value
};
/*foreach (var i in metrics)
{
int num = i.BuildTrim.LastIndexOf('_');
i.BuildTrim = "2";
}*/
return metrics;
}
metrics
是一个IQueryable
。 每次迭代对象时,它都会转到数据库,查询要请求的项,将它们放入指定的对象中,然后允许迭代这些对象。 您正在修改要返回的对象,但如果再次迭代序列,则不会使用这些相同的内存中对象。 相反,它会第二次返回到数据库,并拉回没有更改的新查询。
如另一个答案中所述,如果您只是修改第一个Select
调用以将BuildTrim
设置为所需的值,而不是修改即将被丢弃的对象,则查询将按预期工作。