여러 레벨이 작동하지 않는 IncludeFilter

entity-framework-6 entity-framework-plus

문제

이 IncludeFilter에 문제가 있고 여러 수준을 포함하고 있습니다. Entity Framework 6 Plus를 사용하고 있습니다.

다음은 Load multiple levels 제목 아래에 https://entityframework-plus.net/query-include-filter 를 제공하는 예입니다.

이 작동하지만 원하는 것보다 더 많은 보증 레코드를 반환합니다.

db.Application.Where(x => x.ApplicationId == applicationId)
    .Include(x => x.Lienholder)
    .Include(x => x.Warranty.Select(y => y.Coverage.CoverageGroup))
    .Include(x => x.Vehicle)
    .Include(x => x.Vendor)
    .First();

이것은 작동하지만 .Coverage 는 null이지만 예제에 가장 가깝습니다.

db.Application.Where(x => x.ApplicationId == applicationId)
    .Include(x => x.Lienholder)
    .IncludeFilter(x => x.Warranty.Where(z => true).Where(z =>
        z.WarrantyStatusId == 2 ||
        z.WarrantyStatusId == 3 ||
        z.WarrantyStatusId == 8 ||
        z.WarrantyStatusId == 10
    )
    .IncludeFilter(x => x.Warranty.Where(z => true).Where(z =>
        z.WarrantyStatusId == 2 ||
        z.WarrantyStatusId == 3 ||
        z.WarrantyStatusId == 8 ||
        z.WarrantyStatusId == 10
    ).Select(y => y.Coverage.CoverageGroup))
    .Include(x => x.Vehicle)
    .Include(x => x.Vendor)
    .First();

이것은 IncludeFilter 하면 where 절을 포함해야하기 때문에 전혀 작동하지 않습니다.

db.Application.Where(x => x.ApplicationId == applicationId)
    .Include(x => x.Lienholder)
    .IncludeFilter(x => x.Warranty.Where(z => true).Where(z =>
        z.WarrantyStatusId == 2 ||
        z.WarrantyStatusId == 3 ||
        z.WarrantyStatusId == 8 ||
        z.WarrantyStatusId == 10
    ).Select(y => y.Coverage.CoverageGroup))
    .Include(x => x.Vehicle)
    .Include(x => x.Vendor)
    .First();

이것은 작동하지만 열심히로드하지 않습니다

db.Application.Where(x => x.ApplicationId == applicationId)
    .Include(x => x.Lienholder)
    .IncludeFilter(x => x.Warranty.Where(z => true).Where(z =>
        z.WarrantyStatusId == 2 ||
        z.WarrantyStatusId == 3 ||
        z.WarrantyStatusId == 8 ||
        z.WarrantyStatusId == 10
    )
    .Include(x => x.Vehicle)
    .Include(x => x.Vendor)
    .First();

수락 된 답변

  • IncludeFilter 또는 IncludeOptimized 와 함께 Include 를 혼합 할 수 없습니다.
  • 자신의 IncludeFilter 에 모든 경로를 한 번 포함해야합니다.

가장 가까운 예에서 "Y.Coverage"를 포함하지 않았습니다.

그것들은 현재 도서관에 대한 제한 사항입니다.

다음은 귀하가 찾고있는 것입니다 :

db.Application.Where(x => x.ApplicationId == applicationId)
    .IncludeFilter(x => x.Lienholder)
    .IncludeFilter(x => x.Warranty.Where(z =>
        z.WarrantyStatusId == 2 ||
        z.WarrantyStatusId == 3 ||
        z.WarrantyStatusId == 8 ||
        z.WarrantyStatusId == 10
    ))
    .IncludeFilter(x => x.Warranty.Where(z => true).Where(z =>
        z.WarrantyStatusId == 2 ||
        z.WarrantyStatusId == 3 ||
        z.WarrantyStatusId == 8 ||
        z.WarrantyStatusId == 10
    ).Select(y => y.Coverage))
    .IncludeFilter(x => x.Warranty.Where(z => true).Where(z =>
        z.WarrantyStatusId == 2 ||
        z.WarrantyStatusId == 3 ||
        z.WarrantyStatusId == 8 ||
        z.WarrantyStatusId == 10
    ).Select(y => y.Coverage.CoverageGroup)))
    .IncludeFilter(x => x.Vehicle)
    .IncludeFilter(x => x.Vendor)
    .First();

이것은 IncludeFilter를 사용하면 where 절을 포함해야하기 때문에 전혀 작동하지 않습니다.

아니, 너는 없어.



Related

아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow