.NET Core 3.0 EF Core使用include外键条件过滤的方法
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.EFCore
中WhereDynamic()
方法支持字符串,这样代码可以更灵活。示例代码如下:
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
.NETcoreMysqlefcore中通过dotnet命令Code First创建生成数据库
efcore(Entity Frameworkcore)中实例化创建DatabaseContext方法及代码
.NETcoreefcore(Entity Frameworkcore)去掉重复数据(distinct)
.NETcore2.1ef(Entity Framework)coreSqlite配置和使用分享
ef(Entity Framework)core和ef(Entity Framework)6区别对比
.NETcoreefcore(Entity Framework) 实现分组查询(group by)
efcore2.0和ef6(Entity Framework 6)中配置实体映射关系
.NETcoreef(Entity Framework)core自动创建数据库