У меня есть функция, которая получает количество и вес каждого элемента для пользовательского заказа из таблицы 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) каждый элемент имеет количество и вес. Тем не менее, вес, показанный в таблице, НЕ является результатом количества веса * (то есть, пункт ABC имеет количество 6 для заказа № 12345, и каждый элемент ABC весит 1,00 фунтов). Созданная мной функция работает в том, что она умножает количество единиц заказа на вес (т.е. Общий вес для всех 6 предметов ABC составляет 6,00 фунтов)
Тем не менее, теперь мне нужно принять эти общие весовые значения и добавить их вместе, чтобы получить общий вес для всего заказа. Прямо сейчас, я возвращаю все веса в порядке: 6,00, 5,00, 2,80, 146,76, 6,02, 2,25
Но я не уверен, как добавить все это вместе? Я думал о создании Split(), но тогда я бы преобразовал десятичные дроби в строки, чтобы преобразовать их обратно в десятичные числа, чтобы добавить их вместе "split". Это кажется ужасно сложным... есть ли лучший способ?
Это то, что вы ищите?
SELECT sum(Weight * Quantity) as TotalWeight
FROM OrderItems
WHERE OrderId = @OrderId;
Если это так, это пример запроса агрегации, который является базовой концепцией SQL. Вы должны выполнять эту работу в базе данных, поскольку база данных оптимизирована для работы с большими объемами данных и извлекает такие результаты из таблиц.
Если вы не суммируете общие весовые значения следующим образом: totalWeight + = qty * wgt;
Потому что теперь ваш totalWeight будет содержать общее значение веса последнего элемента только в порядке.