C# 在C中使用ForEach循环通过IEnumerable
我试图循环一个IEnumerable,但由于某种原因,它没有经过foreach循环,因为每个ChartClass的值都没有修改C# 在C中使用ForEach循环通过IEnumerable,c#,loops,foreach,ienumerable,C#,Loops,Foreach,Ienumerable,我试图循环一个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_ME
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;
}
为什么不在查询中将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;
}
度量是一种可量化的方法。每次迭代对象到数据库时,都要查询要查询的项,将它们放入指定的对象中,然后允许迭代这些对象。您正在修改返回的对象,但如果再次迭代序列,将不会使用相同的内存中对象。相反,它第二次返回数据库,并返回一个没有您所做更改的新查询
正如在另一个答案中提到的,如果您只是修改第一个Select调用以将BuildTrim设置为开始时所需的值,而不是修改即将丢弃的对象,那么您的查询将按预期工作。度量是一个IQueryable。每次迭代对象到数据库时,都要查询要查询的项,将它们放入指定的对象中,然后允许迭代这些对象。您正在修改返回的对象,但如果再次迭代序列,将不会使用相同的内存中对象。相反,它第二次返回数据库,并返回一个没有您所做更改的新查询
正如在另一个答案中提到的,如果您只是修改第一个Select调用以将BuildTrim设置为开始时所需的值,而不是修改即将丢弃的对象,您的查询将按预期运行。回答问题做得很好,而不是像我那样绕开问题。回答问题做得很好,而不是像我那样绕开问题。很抱歉,这不是我想要的最终值,因为我必须将其设置为另一个值,而不是2,但是我不能在初始化时使用很多函数。我的错误我的数据库无法识别像string.LastIndexOf这样的命令,所以我不知道是否可以在queryHi中执行。您给出的示例代码没有使用'num',因此删除它似乎是安全的。如果确实使用了该值,那么如果在“选择”之前通过调用“ToList”首先获得查询结果,则可以在查询中使用“LastIndexOf”。这也将解决Servy解释的问题。非常感谢您的帮助,我通过使用lambda表达式修复了它。这不是我想要的最终值,因为我必须将它设置为另一个值,而不是2,但我无法在初始化时使用很多函数。我的错误我的数据库无法识别像string.LastIndexOf这样的命令,所以我不知道是否可以在queryHi中执行。您给出的示例代码没有使用'num',因此删除它似乎是安全的。如果确实使用了该值,那么如果在“选择”之前通过调用“ToList”首先获得查询结果,则可以在查询中使用“LastIndexOf”。这也将修复Servy解释的问题。非常感谢您的帮助,我使用lambda表达式修复了它