【问题标题】:Convert SQL to LINQ with JOIN, GROUP BY, SUM, multiply values two List使用 JOIN、GROUP BY、SUM 将 SQL 转换为 LINQ,将值乘以两个列表
【发布时间】:2018-05-13 18:13:59
【问题描述】:
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# .net linq linq-to-sql


    【解决方案1】:

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

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

    你已经正确地加入了表,加入后,因为你只需要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);
    

    【讨论】:

    • 我需要按百分比降序排列。我已将此代码 orderby g.OrderByDescending(o => o.Porcentaje) 放在 group by 下。这是正确的吗?
    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多