C# Linq对象组由&;总和
我有一个datatable,其中有一列“No”和“Total”。我想把每个“否”的“总计”列的总和带回来。我尝试了下面的方法,但在语法方面遇到了一些错误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
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");