LINQ to Sql、集計またはサブクエリを含む式で集計関数を実行できない

asp.net-core-1.0 c# entity-framework-core

質問

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:エラー:クエリの結果を反復処理中にデータベースで例外が発生しました。 System.Data.SqlClient.SqlException:集計またはサブクエリを含む式で集計関数を実行できません。

受け入れられた回答

良いニュースは、あなたの(絶対に有効な)LINQクエリに問題がないということです。

悪いニュースは、現在(v.1.1.0)EFコアのLINQクエリの変換/処理はまだ完全な悪夢です。多くの試行錯誤の後、誤ったSQL(したがってSQL例外)またはEFコアインフラストラクチャからの異なる内部例外を取得した後、単一の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);

もちろん、ナビゲーションプロパティを使用しても動作しないので、いくつかの名前を推測しました。必要に応じて名前を置き換えることができます。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ