本文主要介绍.NET Core 3.0,使用EF Core查询时带有外键数据,使用include方法进行where条件过滤数据的方法,以及相关的示例代码。

1、安装引用Z.EntityFramework.Plus.EFCore

由于目前的EF Core版本还不支持,include方法中进行where条件过滤,好像是EF Core 5.0支持,目前解决办法是使用Z.EntityFramework.Plus.EFCore中IncludeFilter方法实现。

1)使用Nuget界面管理器

搜索"Z.EntityFramework.Plus.EFCore",在列表中找到它,点击"安装"

相关文档VS(Visual Studio)中Nuget的使用

2)使用Package Manager命令安装

PM> Install-Package Z.EntityFramework.Plus.EFCore

3)使用.NET CLI命令安装

> dotnet add TodoApi.csproj package Z.EntityFramework.Plus.EFCore

相关文档https://entityframework-plus.net/ef-core-query-include-filter

2、使用IncludeFilter实现外键的where条件

注意:使用IncludeFilter方法,必须要引用using Z.EntityFramework.Plus;命名空间。 还不能和AsNoTracking方法一起使用,不能和Include方法混用,不能linq语句混用,不能与IncludeOptimized方法混用,多对多关系不支持yet.

// using Z.EntityFramework.Plus; // Don't forget to include this.
var ctx = new EntitiesContext();
// LOAD orders and the first 10 active related entities.
var list = ctx.Orders.IncludeFilter(x => x.Items.Where(y => !y.IsSoftDeleted)
                                               .OrderBy(y => y.Date)
                                               .Take(10))
                     .ToList();
//Include()方法只支持var list = ctx.Orders.IncludeFilter(x => x.Items)加了where也是不起作用。

或者

var q1 = ctx.Orders.Take(10)
var p1 = q1.Select(x => x.OrderItems.Where(y => !y.IsSoftDeleted));

var list = q1.Select(x => new { x, p1 }).ToList().Select(x => x.X);

3、Z.EntityFramework.Plus.EFCore中WhereDynamic支持字符串

原生的where方法中只支持代码表达式,而Z.EntityFramework.Plus.EFCoreWhereDynamic()方法支持字符串,这样代码可以更灵活。示例代码如下:

var list = ctx.WhereDynamic(x => "x > 2").ToList();
var list = ctx.WhereDynamic(x => "x > y", new { y = 2 }).ToList();

var list = ctx.Execute<IEnumerable<int>>("Where(x => x > 2)");
var list3 = ctx.Execute("Where(x => x > y).OrderBy(x => x).ToList()", new { y = 2 });

相关文档:

https://entityframework-plus.net/ef-core-linq-dynamic

.NET core Mysql ef core中通过dotnet命令Code First创建生成数据库

ef core(Entity Framework core)中实例化创建DatabaseContext方法及代码

.NET core ef core(Entity Framework core)去掉重复数据(distinct)

.NET core 2.1 ef(Entity Framework) core Sqlite配置和使用分享

ef(Entity Framework) core和ef(Entity Framework)6区别对比

.NET core ef core(Entity Framework) 实现分组查询(group by)

ef core 2.0和ef6(Entity Framework 6)中配置实体映射关系

.NET core ef(Entity Framework) core 自动创建数据库

.NET core ef core实现left join查询



推荐文档