C# 将linq sum查询迁移到.net core 3.1

C# 将linq sum查询迁移到.net core 3.1,c#,linq-to-sql,asp.net-core-3.0,C#,Linq To Sql,Asp.net Core 3.0,我正在从.net core 2.2迁移到3.0,并且linq查询出错 var accountList = someOtherList.Select(x => x.AccountNo).ToList(); var collectedAmount = await _dbContext.AllocPayments .Where(p => accountList.Contains(p.AccountNo))

我正在从.net core 2.2迁移到3.0,并且linq查询出错

        var accountList = someOtherList.Select(x => x.AccountNo).ToList();
        var collectedAmount = await _dbContext.AllocPayments
                .Where(p => accountList.Contains(p.AccountNo))
                .SumAsync(x => x.Amount);
这是一个错误:

System.InvalidOperationException:LINQ表达式 “DbSet .其中(a=>\uuuu accountList\u 0.Contains(a.AccountNo)) .Sum(a=>a.Amount)“”无法转换。要么以可以翻译的形式重写查询,要么切换到客户端 通过插入对AsEnumerable()的调用显式求值, AsAsAsyncEnumerable()、ToList()或ToListSync()。看见 了解更多信息


我阅读了文档,可以通过添加
.ToListAsync()
并在
client/.net
中对其进行评估来使其工作,但是为什么不能在
server/sql server
上对该查询进行评估呢?

建议:编写满足您需要的sql,而不是依赖于查询生成器。它可以在任何运行时工作,您可以完全控制性能。大多数ORM样式的工具允许您发布自定义SQL@MarcGravell在这里,整洁会很有用;)金额和账户是否已计算?它们是如何定义的?您必须确保在升级时重新编译所有内容。编译器依赖项并不总是识别库升级。还要确保更新数据库和c#类之间的映射。@JeremyLakeman两者都是数据库列