C#查询按列求和数据

本文关键字:求和 数据 查询 | 更新日期: 2023-09-27 18:01:08

我有一个包含DATE列和POWER列的数据视图。我从一个XML文件中填充这个数据视图,该文件是从一个特定的链接中获得的,我想用"DATE"对POWER列组求和。我使用这个linq查询来获得它:

var query = from row in _Hdt.AsEnumerable()
        group row by row.Field<int>("DATE") into grp
        orderby grp.Key
        select new
        {
        DATE = grp.Key,
        Sum = grp.Sum(r => r.Field<decimal>("KW"))
        };
        foreach (var grp in query)
        {
        Console.WriteLine("{0}'t{1}", grp.Id, grp.Sum);
        }
        }

但我遇到了错误:

Error   1   Invalid token 'return' in class, struct, or interface member declaration    
Error   2   Invalid token ';' in class, struct, or interface member declaration 
Error   3   Expected class, delegate, enum, interface, or struct     
Error   4   Expected class, delegate, enum, interface, or struct     
Error   5   Expected class, delegate, enum, interface, or struct     
Error   6   Identifier expected C:'Documents and Settings'Administrator.MUSEWERX-
Error   7   Expected class, delegate, enum, interface, or struct     
Error   8   Expected class, delegate, enum, interface, or struct     
Error   9   A namespace does not directly contain members such as fields or methods 
Error   10  Type or namespace definition, or end-of-file expected   

我希望得到你的答复。

C#查询按列求和数据

问题不在于LINQ查询本身,而在于大括号的放置不正确。

显然,编译器决定return语句就在类声明的内部。当然,不能从类中return,只能从方法中return

我不能马上说出问题,因为你只发布了一段代码,但我注意到有两个关闭的},而不是只有一个匹配的foreach——这可能是编译器思维方法结束的原因吗?

创建一个返回IEnumerable的方法并将代码放入其中。不要直接在类内编写代码。

编辑:

public IEnumerable MethodAmk(){
          var query = from row in _Hdt.AsEnumerable()         
                      group row by row.Field<int>("DATE") into grp         
                      orderby grp.Key         
                      select new {         
                            DATE = grp.Key,         
                            Sum = grp.Sum(r => r.Field<decimal>("KW"))         
            };          
          foreach (var grp in query)         
                {         
                 Console.WriteLine("{0}'t{1}", grp.Id, grp.Sum);         
               } 
          return query;
}