【发布时间】:2022-02-05 04:19:58
【问题描述】:
我想通过在 sum 查询中输入 subquery 来获得结果。
以下代码在我写入 Sql 时有效。
但在 EF 上,如何在顶部添加另一个选择?
SQL
此代码有效。
select
sum (data.rate)
from
(
SELECT
t1.Id,
(c.rate /
(SELECT COUNT(1) FROM [table4] AS [t4] WHERE ([t4].[FKId] = p1.Id))) as rate
FROM [table1] AS [t1]
INNER JOIN [table2] AS [t2] ON ([t1].[FKId] = [t2].[Id])
INNER JOIN [table3] AS [t3] ON ([t1].[FKId] = [t3].[Id]))
as data
C#
var data = await (
????
from t1 in ctx.table1
join t2 in ctx.table2 on new { t1.FKId} equals new { FKId = t2.Id}
join t3 in ctx.table3 on new { t1.FKId} equals new { FKId = t3.Id}
select new
{
rate = t3.Rate /
(from t4 in ctx.table4
where t4.FKId == t2.Id
select t4.Id)
.Count())
})
.SumAsync(sm => (double?)sm.rate ?? 0);
此 c# 代码不起作用。
错误:
无法对包含 聚合或子查询。
【问题讨论】:
-
您正在创建许多您没有使用的匿名类型。
-
您的 SQL 显示为
where t4.FKId = p1.Id而您的 LINQ 显示为t4.FKId == t2.Id- 为什么它们不同?同样适用于 SQLc.rate和 LINQt3.Rate?
标签: sql-server linq tsql entity-framework-core