LINQ - 加入两个DataTable,乘以3列,然后得到总和

时间:2017-04-20 03:13:34

标签: c# sql-server linq datatable dataset

我有两个DataTable。

我需要加入它们,将三列再乘以另外三列,然后获得这两列的总和。如果它是纯SQL,则不会有group by子句,只有join和SUM。这是我到目前为止所做的事情,但我得到了#34;查询正文必须以select子句或group子句结束"即使我以一个select子句结束(我试图在变量中选择我的总数

        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。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用匿名类型。像这样:

select new {weight = lines.Sum(w => w.extended_weight), volume = lines.Sum(v => v.extended_volume)};

仔细看看你的代码。您使用的into关键字错误。它必须与groupjoinselect子句一起使用。像这样:

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();

答案 1 :(得分:0)

Aggregate可能是你需要的。