我有一个函数可以根据订单ID从SQL表中获取用户订单的每个项目的数量和权重:
protected decimal getOrderWeight(int orderid)
{
string sqlCmd = "SELECT Weight, Quantity FROM OrderItems WHERE OrderId = @OrderId";
int qty = 0;
decimal wgt = 0;
decimal totalWeight = 0;
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
{
cn.Open();
SqlCommand cmd = new SqlCommand(sqlCmd, cn);
cmd.Parameters.AddWithValue("@OrderId", orderid);
using (IDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
qty = Convert.ToInt32(reader["Quantity"]);
wgt = Convert.ToDecimal(reader["Weight"]);
totalWeight = qty * wgt;
}
cn.Close();
}
}
return totalWeight;
}
在表格(称为OrderItems)中,每个项目都有数量和权重。但是,表格中的重量不是重量*数量的结果(即,订单#12345的项目ABC的数量为6,每个ABC项目的重量为1.00磅)。我创建的功能的工作原理是它将每个订单项的数量乘以重量(即所有6个ABC项目的总重量为6.00磅)
但是,我现在需要获取这些总重量值并将它们加在一起以获得整个订单的总重量。现在,我按顺序返回所有权重: 6.00, 5.00, 2.80, 146.76, 6.02, 2.25
但我不确定如何将所有这些添加到一起?我正在考虑做一个Split()然后我会将小数转换为字符串,只是将它们转换回小数,将它们一起添加到一起" split。"这看起来非常复杂......有更好的方法吗?
答案 0 :(得分:3)
这是你在找什么?
SELECT sum(Weight * Quantity) as TotalWeight
FROM OrderItems
WHERE OrderId = @OrderId;
如果是这样,这是聚合查询的一个示例,这是一个基本的SQL概念。您应该在数据库中执行此类工作,因为数据库已经过优化,可以处理大量数据并从表中提取此类结果。
答案 1 :(得分:0)
你不应该总计这样的总重量值: totalWeight + = qty * wgt;
因为现在您的 totalWeight 将仅包含最后一项的总重量值。