私はEF6からEFコア(ASP.NETコア1.0 RTMプロジェクト)に移植しようとしているコードを持っています。これは、 "Verpleegperiode"の開始日と終了日の間に、例えば2015年に "Verpleegperiode"を使用して患者のテーブルをフィルタリングします(私はEF6プロジェクトでこれを使用してWhere句を名前、誕生日、およびフィルタのこれらの種類にフィルタリングするのIQueryableオブジェクト、)EFコア1.0.0チェーンwhere句
コード:
var datetime = DateTime.Parse("5/7/2015");
var patients = _context.Patienten.Include(p => p.Dossiers).ThenInclude(d => d.DossierContact).ThenInclude(dc => dc.Verpleegperiodes)
.Where(p =>
p.Dossiers.Any(d =>
d.DossierContact.Verpleegperiodes.Any(vp =>
(!vp.BeginDatumUur.HasValue || vp.BeginDatumUur.Value <= datetime) &&
(!vp.BeginDatumUur.HasValue || vp.EindDatumUur >= datetime))
))
.Where(p =>
p.Dossiers.Any(d => d.DossierContact == null ||
d.DossierContact.Verpleegperiodes.Any(vp =>
!vp.BeginDatumUur.HasValue || vp.BeginDatumUur.Value.Year.ToString() == "2015")
)).ToList();
これは、各「ドシエの」「DossierContact」にそれぞれ「Verpleegperiode」のために呼び出されたクエリになり。
EF6では、Where節が1つで、ジョインとサブクエリが自動的に使用されているクエリが生成されました(これはおそらく時間がかかります) EF6によって作成され、働いた。
これはEFコアで終了していないこと、またはこれが私のコードの不具合であるとは確信していません。そのため、EFコアGithubプロジェクトでバグを報告する前にこれを尋ねています。
EFで定義された関係:患者1対多数の書類、1対1の書類DossierContact、DossierContact 1対多のVerpleegperiodes。
私はGithubにバグとして提出しました:https://github.com/aspnet/EntityFramework/issues/6448 – AppSum
@AppSum最新バージョンを入手してビルドします。バグを再現するために再試行してください。問題が本当に修正されている場合は、メモを追加してこの回答を確認してください。 –