C# Linq对象组由&;总和

C# Linq对象组由&;总和,c#,linq,dataset,sum,C#,Linq,Dataset,Sum,我有一个datatable,其中有一列“No”和“Total”。我想把每个“否”的“总计”列的总和带回来。我尝试了下面的方法,但在语法方面遇到了一些错误 var Values = (from data in DtSet.Tables["tblDetails"].AsEnumerable() group data by data.Field<"No"> select new { name_1

我有一个datatable,其中有一列“No”和“Total”。我想把每个“否”的“总计”列的总和带回来。我尝试了下面的方法,但在语法方面遇到了一些错误

var Values =
        (from data in DtSet.Tables["tblDetails"].AsEnumerable()
         group data by data.Field<"No">
         select new
         {
             name_1 = data.Field<double>("No"),
             name_2 = data.Field<double>("Total"),
         }
         );   
var值=
(来自DtSet.Tables[“tblDetails”].AsEnumerable()中的数据)
按数据对数据进行分组。字段
选择新的
{
name_1=数据字段(“否”),
name_2=数据字段(“总计”),
}
);   

这将为您提供
name\u 2
属性中的
Total
字段和
name\u 1
属性中的分组
No
(我认为您需要在此处更好地命名)

var Values=来自DtSet.Tables[“tblDetails”].AsEnumerable()中的行
按行将字段(“否”)分组为g
选择新的
{
名称_1=g.键,
name_2=g.Sum(r=>r.Field(“Total”))
};

请考虑名称
No
TotalSum

您开始使用linq,但好的旧
数据表
有以下功能:


我必须把
x
放在这里,因为我不知道“No”列的值。部件
“No=x”
是一个过滤器。如果为null或空字符串,所有行都将用于计算。

name_1
name_2
听起来像是可怕的名字。你为什么不把它们命名为
No
TotalSum
,或者类似的东西呢?这是一个很好的例子,所以你必须对每个
No
都这样做?在这种情况下,我认为这在各方面都比LINQ差。@svick No,它一次对整个表进行计算。但是第二部分是过滤器,不是吗?因此,如果我想计算每个
No
(这是问题要求的)的总和,我必须对每个
No
执行此操作。例如,如果
No
的值为1,2,…1000,那么我必须使用
No=1
No=2
,…,
No=1000
执行它。还是我遗漏了什么?@svick啊,对不起,我现在明白你的意思了。筛选器可以为null或空字符串以使用所有行。很好,你让我添加了这个。谢谢你提供的关于命名约定的提示。你的代码有效-谢谢。我将如何通过另一个不需要求和的列,例如,name_3将是字段“AccountNo”…@user1936588是否所有具有相同
No
值的行都具有相同的
AccountNo
?如果是,则可以在分组键中包含
AccountNo
。否则,您将有如下帐户编号列表
Accounts=g.Select(r=>r.Field(“AccountNo”).ToList()
var Values = from row in DtSet.Tables["tblDetails"].AsEnumerable()
             group row by row.Field<double>("No") into g
             select new
             {
                 name_1 = g.Key,
                 name_2 = g.Sum(r => r.Field<double>("Total"))
             };
var total = DtSet.Tables["tblDetails"].Compute("sum(Total)", "No = x");