gpt4 book ai didi

c# - LINQ to Sql,无法对包含聚合或子查询的表达式执行聚合函数

转载 作者:行者123 更新时间:2023-11-30 20:32:46 27 4
gpt4 key购买 nike

private decimal GetBankAccountCashierTotal()
{
var company = _context.Company.FirstOrDefault();

return _context.PersonBankAgencyAccount
.Where(p => p.PersonID.Equals(company.PersonID))
.Where(c => c.BankAgencyAccountBalance
.Any(b => b.Reference <= DateTime.Now))
.Select(x => x.BankAgencyAccountBalance
.Where(d => d.Reference.Date <= DateTime.Now)
.OrderByDescending(d => d.Reference)
.FirstOrDefault()
.CurrentBalance)
.sum();
}

这是我的完整方法,在这个方法的调用中我得到了一个异常

An exception of type 'System.Data.SqlClient.SqlException' occurred in Microsoft.EntityFrameworkCore.dll but was not handled in user code

和输出

Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler:Error: An exception occurred in the database while iterating the results of a query. System.Data.SqlClient.SqlException: Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

最佳答案

好消息是问题不在您的(绝对有效的)LINQ 查询中。

坏消息是目前 (v.1.1.0) EF Core LINQ 查询翻译/处理仍然是一场噩梦。经过大量的试验和错误,得到不正确的 SQL(因此 SQL 异常)或来自 EF Core 基础结构的不同内部异常,only(!) 我能够通过单个 SQL 获得所需结果的方法无一异常(exception)如下(必须完全这样写):

return _context.PersonBankAgencyAccount
.Where(p => p.PersonID.Equals(company.PersonID))
.SelectMany(p => _context.BankAgencyAccountBalance
.Where(b => b.AccountId == p.Id && b.Reference.Date <= DateTime.Now)
.OrderByDescending(b => b.Reference)
.Take(1))
.Sum(b => b.CurrentBalance);

当然因为使用导航属性不起作用,我猜了一些名字,如果需要你可以用你的替换它们。

关于c# - LINQ to Sql,无法对包含聚合或子查询的表达式执行聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40916442/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com