C# 将linq sum查询迁移到.net core 3.1
我正在从.net core 2.2迁移到3.0,并且linq查询出错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))
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两者都是数据库列