使用 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_iva
和 total_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);
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_iva
和 total_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);