我希望通过在sum查询中输入子查询来获得结果。
当我写入Sql时,以下代码是有效的。
但是在EF上,我该如何在顶部添加另一个select?
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# 代码不能正常工作。
错误信息:
无法对包含聚合函数或子查询的表达式执行聚合运算。
where t4.FKId = p1.Id
,而你的LINQ语句写成了t4.FKId == t2.Id
- 为什么不一样?同样的问题也出现在SQLc.rate
和LINQt3.Rate
上吗? - NetMage