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
.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查询