使用 JOIN、GROUP BY、SUM 将 SQL 转换为 LINQ,将值相乘两个列表

Convert SQL to LINQ with JOIN, GROUP BY, SUM, multiply values two List

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)
    }

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

考虑到 porcentaje,我猜您想对所有 total_linea 求和,因此,例如,您可以将查询写成这样:

您已正确连接表,连接后,因为您只需要 id_ivatotal_lineaporcentaje,仅以匿名类型收集这些值, 然后按 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);