는 프로젝션을하는 관련 기관
를 필터링 할 수있는 두 가지 옵션이 있습니다. 불행히도 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)})
두 번째 옵션은 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