.NET Core 3.0の変更により、
... NavigationExpandingExpressionVisitor 'が失敗しました。これは、EF Coreのバグまたは制限を示している可能性があります。詳細については https://go.Microsoft.com/fwlink/?linkid=21014 を参照してください。)---> System.InvalidOperationException:LINQ式 'GroupJoin、...の処理.
これは非常に単純なクエリなので、.NET CORE 3.0で実行する方法が必要です。
var queryResults1 = await patients
.GroupJoin(
_context.Studies,
p => p.Id,
s => s.Patient.Id,
(p, studies) => new
{
p.DateOfBirth,
p.Id,
p.Name,
p.Sex,
Studies =studies.Select(s1=>s1)
}
)
.AsNoTracking().ToListAsync();
私は基本的に、Studyを患者に結合するLinqクエリ(または上記のメソッド構文)を探しており、Studyを空のリストに設定するか、特定の患者のスタディがない場合はnullを設定します。
何か案は?これは.NET Core 2.2で機能していました。また、上記のMSFTリンクは、重要な変更がクライアント側の評価に関連しており、生成されたクエリがテーブル全体を読み取ることを回避していることを示しています。ただし、この単純なクエリでは、結合はサーバー側で簡単に実行できるはずです。
まったく同じ問題があり、大きな苦労がありました。 .net Core 3.0は、メソッド構文で(まだ?)JoinまたはGroupjoinをサポートしていないことがわかります。楽しい部分ですが、クエリ構文で機能します。
これを試してみてください。これは、メソッド構文のビットを含むクエリ構文です。これは、Niceの左外部結合を持つ正しいSQLクエリにうまく変換され、データベースで処理されます。私はあなたのモデルを持っていないので、自分で構文をチェックする必要があります...
var queryResults1 =
(from p in _context.patients
from s in _context.Studies.Where(st => st.PatientId == p.Id).DefaultIfEmpty()
select new
{
p.DateOfBirth,
p.Id,
p.Name,
p.Sex,
Studies = studies.Select(s1 => s1)
}).ToListAsync();