Linq 使用EF core Include时排除已删除的子项
以下是我的实体结构: 我的代码用于获取包含所有儿童测试的课程: 它包括所有与课程相关的儿童测试。但是我想包括所有状态未被删除的测试IsDeleted=false。为此,我必须使用以下代码:Linq 使用EF core Include时排除已删除的子项,linq,asp.net-core,entity-framework-core,Linq,Asp.net Core,Entity Framework Core,以下是我的实体结构: 我的代码用于获取包含所有儿童测试的课程: 它包括所有与课程相关的儿童测试。但是我想包括所有状态未被删除的测试IsDeleted=false。为此,我必须使用以下代码: var course = await Db.Courses.Include(x => x.Tests.Where(y=>!y.IsDeleted)).FirstOrDefaultAsync(y => y.CourseId == id); 但它并不排除已删除的测试。有人能告诉我如何排除已删
var course = await Db.Courses.Include(x => x.Tests.Where(y=>!y.IsDeleted)).FirstOrDefaultAsync(y => y.CourseId == id);
但它并不排除已删除的测试。有人能告诉我如何排除已删除的测试吗?常规包含无法与筛选器一起使用。您需要从nuget下载Z.EntityFramework.Plus.EFCore。并使用下面的代码
var course = await Db.Courses.Where(y => y.CourseId == id).IncludeFilter(x => x.Tests.Where(y => y.IsDeleted == false)).FirstOrDefaultAsync;
常规包含无法与筛选器一起使用。您需要从nuget下载Z.EntityFramework.Plus.EFCore。并使用下面的代码
var course = await Db.Courses.Where(y => y.CourseId == id).IncludeFilter(x => x.Tests.Where(y => y.IsDeleted == false)).FirstOrDefaultAsync;
您无法在EF core的Include中进行筛选,请尝试使用下面的代码
var course = await Db.Courses.Include(x => x.Tests).FirstOrDefaultAsync(y => y.CourseId == id);
course.Tests = course.Tests.Where(t => !t.IsDeleted).ToList();
请参阅您无法在EF core的Include中进行筛选,请尝试使用以下代码
var course = await Db.Courses.Include(x => x.Tests).FirstOrDefaultAsync(y => y.CourseId == id);
course.Tests = course.Tests.Where(t => !t.IsDeleted).ToList();
参考我得到了解决方案。我通过添加一个全局过滤器解决了这个问题,如下所示:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Test>().HasQueryFilter(p => !p.IsDeleted);
}
详细说明我得到了解决方案。我通过添加一个全局过滤器解决了这个问题,如下所示:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Test>().HasQueryFilter(p => !p.IsDeleted);
}
详细说明这是一个很好的解决方案,但成本似乎有点高。我通过浏览文档添加了一个解决方案。这是一个很好的解决方案,但成本似乎有点高。我通过探索文档添加了一个解决方案。但是如果您想要所有记录,包括IsDeleted=true的记录,该怎么办?根据您链接的文档,在这种情况下,您需要使用IgnoreQueryFilter。你应该将自己的答案标记为已接受+1但如果您希望所有记录,包括IsDeleted=true的记录,该怎么办?根据您链接的文档,在这种情况下,您需要使用IgnoreQueryFilter。你应该将自己的答案标记为已接受+1.