Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 使用EF core Include时排除已删除的子项_Linq_Asp.net Core_Entity Framework Core - Fatal编程技术网

Linq 使用EF core Include时排除已删除的子项

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); 但它并不排除已删除的测试。有人能告诉我如何排除已删

以下是我的实体结构:

我的代码用于获取包含所有儿童测试的课程:

它包括所有与课程相关的儿童测试。但是我想包括所有状态未被删除的测试IsDeleted=false。为此,我必须使用以下代码:

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.