C#收集行总和

时间:2016-04-07 02:37:54

标签: c# sql-server

我在SQL Server 2008中有一个存储过程:

ALTER proc [dbo].[Get_Total]
    @ID int
as
    select Total 
    from Order_details 
    where Id_order = @ID

如果有多行,我想得到行的总和,所以我尝试用for循环

for (int i = 0; i < set.Tables[1].Rows.Count; i++)
{                                                
     Total.Text += Convert.ToInt32(set.Tables[1].Rows[i][0]).ToString();
}

但它不起作用,它会返回一大笔金额,因此循环没有停止。

请帮忙!

3 个答案:

答案 0 :(得分:1)

为什么不在数据库中总结:

select Sum(Total) from Order_details 
where Id_order = @ID

虽然这表明您的架构设计存在问题....

答案 1 :(得分:1)

在SQL中执行求和:

ALTER proc [dbo].[Get_Total] (
    @ID int
)
as
begin
    select sum(Total) as Total
    from Order_details 
    where Id_order = @ID;
end;

我不知道你为什么要这样做作为存储过程。您可以轻松地将其作为用户定义的函数执行 - 然后更容易获得结果。

答案 2 :(得分:0)

问题是,你在这里进行string连接,这可能会给你一个大的连接数而不是Sum

你可以这样做。

int value= 0;
for (int i = 0; i < set.Tables[1].Rows.Count; i++)
{                                                
  value += Convert.ToInt32(set.Tables[1].Rows[i][0]);
}

Total.Text = value.ToString();

另一种简单的方法,使用Linq

Total.Text = set.Tables[1].AsEnumberable()
                          .Select(row=>int.Parse(row[0]))
                          .Sum()
                          .ToString();