В вашем примере вывода вы на самом деле не суммированного цена единицы, но Soun DS, как то, что вы хотите что-то вроде этого:
var results =
from row in lDTSalesOrder
group row by row.Field<string>("SKU") into grp
orderby grp.Key
select new
{
SKU = grp.Key,
Quantity = grp.Sum(r => r.Field<double>("Quantity")),
UnitPrice = grp.Sum(r => r.Field<double>("UnitPrice")),
LinePrice = grp.Sum(r => r.Field<double>("LinePrice"))
};
Это будет производить:
SKU Quantity UnitPrice LinePrice
A 20 4 40
B 10 2 40
Если вы действительно хотите, чтобы произвести цена единицы 2
для первого результата записи, Sum
является не то, что вы хотите; вам придется использовать некоторые другие функции агрегата. Min
, Max
, Average
или даже Select(...).First()
произведут этот результат, но вам нужно будет более точно определить, что вы хотите в своем выходе. Вы также можете сделать это:
var results =
from row in lDTSalesOrder
group row by new { SKU = row.Field<string>("SKU"), UnitPrice = row.Field<string>("UnitPrice") } into grp
orderby grp.Key.SKU
select new
{
SKU = grp.Key.SKU,
Quantity = grp.Sum(r => r.Field<double>("Quantity")),
UnitPrice = grp.Key.UnitPrice,
LinePrice = grp.Sum(r => r.Field<double>("LinePrice"))
};
Любой из этих вариантов будет производить:
SKU Quantity UnitPrice LinePrice
A 20 2 40
B 10 2 40
Почему вы делаете lDTSalesOrder перечислимого если вы запросов к базе данных? –
В чем проблема? Я выполнил ваш код и вернул действительные результаты. – Kamyar