[英]EFCore Linq Cannot perform an aggregate function on an expression containing an aggregate or a subquery
[英]LINQ to Sql, cannot perform an aggregate function on an expression containing an aggregate or a subquery
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();
}
這是我的完整方法,在調用此方法時出現異常
Microsoft.EntityFrameworkCore.dll中發生類型'System.Data.SqlClient.SqlException'的異常,但未在用戶代碼中處理
和輸出
Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler:Error:迭代查詢結果時數據庫中發生異常。 System.Data.SqlClient.SqlException:無法對包含聚合或子查詢的表達式執行聚合功能。
好消息是問題不在您的(絕對有效)LINQ查詢中。
壞消息是,當前(v.1.1.0)EF Core LINQ查詢翻譯/處理仍然是一場噩夢。 經過大量的試驗和錯誤之后,從EF Core基礎結構中獲取了不正確的SQL(因此有SQL異常)或不同的內部異常,我唯一能夠通過單個SQL獲得所需結果且沒有異常的方法如下(必須完全以這種方式編寫):
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);
當然,由於使用導航屬性不起作用,所以我猜了一些名稱,如果需要,可以將其替換為您的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.