2017-04-20 54 views
0

我有两个DataTable。LINQ - 加入两个DataTable,乘以3列,然后得到总计总数

我需要加入他们,乘以三列,然后再乘以三列,然后得到这两列的总和。如果它是纯SQL,则不会有group by子句,只有join和SUM。这是我到目前为止,但我得到的“一个查询正文必须以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

回答

0

你可以尝试使用匿名类型事情是这样的:。

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

你的代码看着一点点接近你正在使用的into关键字错误,必须与group,0123配合使用或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(); 
+0

这就是我原来的,但我仍然在Visual Studio中获取“查询主体必须以select语句结束”错误(如果我将“成行”声明,那么Select语句中的“行”引用无效,当然... – dcaparaso

+0

@dcaparaso - 我看起来更接近你的代码,并增加了更多的你看 – tinstaafl

+0

愚蠢的问题,然后我如何使用我的结果weightTotal和volumeTotal在我的代码的其余部分?例如,将结果分配给变量或将它们转换为字符串输出? – dcaparaso