Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用ForEach循环通过IEnumerable_C#_Loops_Foreach_Ienumerable - Fatal编程技术网

C# 在C中使用ForEach循环通过IEnumerable

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

我试图循环一个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;
    }

为什么不在查询中将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表达式修复了它