[英]LINQ with JOIN, GROUP BY, ORDER BY, SUM, multiply values two List
[英]LINQ - Join two DataTables, multiply 3 columns, and then get grand total sum
我有兩個數據表。
我需要加入它們,先乘三列,再乘三列,然后得到這兩列的總和。 如果它是純SQL,將沒有group by子句,只有聯接和SUM。 這是到目前為止的內容,但是即使我以select子句結尾(我試圖將總計選擇到變量中),我也得到“查詢主體必須以select子句或group子句結尾”
decimal weight = 0;
decimal volume = 0;
var results = from line in xferLinesTable.AsEnumerable()
join invmast in inv_mast.AsEnumerable()
on line.Field<int>("inv_mast_uid") equals invmast.Field<int>("inv_mast_uid")
let extended_weight = line.Field<decimal>("quantity_requested") * line.Field<decimal>("unit_size") * invmast.Field<decimal>("net_weight")
let extended_volume = line.Field<decimal>("quantity_requested") * line.Field<decimal>("unit_size") * invmast.Field<decimal>("cube")
into lines
select weight = lines.Sum(w => w.extended_weight), volume = lines.Sum(v => v.extended_volume);
我要去哪里錯了? TIA。
您可以嘗試使用匿名類型。 像這樣:
select new {weight = lines.Sum(w => w.extended_weight), volume = lines.Sum(v => v.extended_volume)};
仔細查看您的代碼。 您使用了into
關鍵字錯誤。 它必須與group
, join
或select
子句一起使用。 像這樣:
var results = (from line in xferLinesTable.AsEnumerable()
join invmast in inv_mast.AsEnumerable()
on line.Field<int>("inv_mast_uid") equals invmast.Field<int>("inv_mast_uid")
let extended_weight = line.Field<decimal>("quantity_requested") * line.Field<decimal>("unit_size") * invmast.Field<decimal>("net_weight")
let extended_volume = line.Field<decimal>("quantity_requested") * line.Field<decimal>("unit_size") * invmast.Field<decimal>("cube")
group new {weight = extended_weight,volume = extended_volume} by "A" into lines
select new {weightTotal = lines.Sum(x => x.weight), volumeTotal = lines.Sum(x => x.volume)}).FirstOrDefault();
匯總可能需要您的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.