使用JOIN,GROUP BY,SUM将SQL转换为LINQ,将值乘以两个List

时间:2018-05-13 18:13:59

标签: c# .net linq linq-to-sql

SELECT
    (SUM(L.total_linea) * I.porcentaje / 100) AS iva
FROM 
    linea_ventas L 
JOIN 
    iva I ON L.id_iva = I.id_iva
GROUP BY 
    L.id_iva

我尝试使用LINQPad 5程序直接在我的数据库中编写查询,然后在我的代码中添加它,但我在此处被阻止:

 from l in linea_ventas
    join i in ivas on l.id_iva equals i.id_iva
    group l by new { l.id_iva } into g
    select new
    {
       iva = g.Sum(l => l.total_linea)
    }

1 个答案:

答案 0 :(得分:1)

这个SQL查询不正确,因为您应该在GROUP BY子句中使用SELECT子句中的内容(除非您在聚合函数中使用它),所以在这里您应该在GROUP BY中使用I.porcentaje,尽管我不认为像百分比这样的分组是你想要的。

我想你想要考虑total_linea的所有porcentaje,所以,例如,你可以这样编写你的查询:

您加入后已正确加入表格,因为您只需要id_ivatotal_linea以及porcentaje,只能以匿名类型收集这些值, 然后按id_iva分组(就像你自己一样),然后在分组中选择值并进行计算:

var result = from l in linea_ventas
    join i in ivas on l.id_iva equals i.id_iva
    select new {
                 l.id_iva,
                 value = l.total_linea * i.porcentaje / 100
               } into selected
    group selected by selected.id_iva into groups
    select groups.Sum(v => v.value);