c# - 使用 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)
}
解决方案
此 SQL 查询不正确,因为您应该将 SELECT 子句中的内容带入 GROUP BY 子句(除非您在聚合函数中使用它),所以在这里您应该I.porcentaje
在 GROUP BY 中使用,尽管我不认为按类似的方式进行分组百分比是你想要的。
我猜你想总结所有total_linea
考虑porcentaje
,所以,例如,你可以这样写你的查询:
加入后,您已正确连接表,因为您只需要id_iva
andtotal_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);
推荐阅读
- spring - Spring SFTP Outbound Adapter - 确定文件何时发送
- java - webflux 中的异步请求不是异步的
- java - Qt 5.14.2 在 Android 上共享文件
- python-3.x - 如何从单引号转换带有双引号的python字典
- c# - 如何返回与登录系统的用户具有相同城市代码的用户列表?
- java - 如何在 logback.groovy 中为日志启用 traceId 以跟踪请求。应用光学
- sql - 将单个表中的行与不需要的结果连接起来
- javascript - 在Javascript中以非可变方式将字符串附加到数组
- magento - Magento 2 Cadence Dedup 文件名、目录名或卷标语法不正确
- c# - 如何解决aws Keyspaces中的“范围删除请求限制在单个范围内可以删除的项目数量”问题?