投影を行う関連企業
をフィルタリングするための2つのオプションがありますが。 残念ながら、Include
メソッドを使用すると、意図したとおりに関連エンティティをフィルタリングできません。以下の例のように、クエリをDTOオブジェクトまたは匿名オブジェクトに投影する必要があります。
var query=context.Users.Include(x => x.UserRoles)
.Where(r => r.IsDeleted == IsDeleted)
.Select(u=> new{ ...,
Roles=x => x.UserRoles.Where(y=>!y.IsDeleted)})
2番目のオプションはExplicitly Loadingです。しかし、これはある特定のエンティティの関連エンティティ、たとえば、を読み込むことができる場合です。
var user=context.Users.FirstOrDefault(r.IsDeleted == IsDeleted);//Getting a user
context.Entry(user)
.Collection(b => b.UserRoles)
.Query()
.Where(y=>!y.IsDeleted)
.Load();
あなたが最初のクエリから取得した各エンティティごとのforeachのこの内部を行うことができます
、
var query=context.Users.Where(r => r.IsDeleted == IsDeleted);
foreach(var u in query)
{
context.Entry(u)
.Collection(b => b.UserRoles)
.Query()
.Where(y=>!y.IsDeleted)
.Load();
}
あなたがあなたのDBへの往復をするつもりされているので、本当に非効率的になるだろう各エンティティごとに私のアドバイスは、最初のオプションを使用して、クエリを投影しています。
あなたが達成しようとしていることが正確ではありません。遅延ロードを無効にすることができます(問題がある場合)。または、達成しようとしている場合は、UserRolesに参加できます。 – BurnsBA