首页 > 解决方案 > 使用 JOIN、GROUP BY、SUM 将 SQL 转换为 LINQ,将值乘以两个列表

问题描述

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

标签: c#.netlinqlinq-to-sql

解决方案


此 SQL 查询不正确,因为您应该将 SELECT 子句中的内容带入 GROUP BY 子句(除非您在聚合函数中使用它),所以在这里您应该I.porcentaje在 GROUP BY 中使用,尽管我不认为按类似的方式进行分组百分比是你想要的。

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

加入后,您已正确连接表,因为您只需要id_ivaandtotal_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);

推荐阅读