.NET CORE 2 EF 包括
Posted
技术标签:
【中文标题】.NET CORE 2 EF 包括【英文标题】:.NET CORE 2 EF Include 【发布时间】:2018-05-06 13:29:25 【问题描述】:我正在使用新的 .net 核心和 EF。
我需要有关 include linq 命令的帮助。我有一些 1:N 模型,如果集合包含一些标记为已删除的数据,我不想包含它们。
怎么做?
var company = await _context.Company
.Include(y => y.Administrators)
.Include(y => y.CompanyPartTimers)
.Include(z => z.WorkPlaces)
.Include(z => z.Requirements)
.FirstAsync(x => x.Id == id);
如果我添加条件
.Include(z => z.WorkPlaces).Where(x=>x.WorkPlaces.Where(x=>!x.IsDeleted))
它不起作用。这个怎么写?
接下来我有 IDeletable 接口,如果我有一些自定义 linq 表达式并且可以为 ex 做的话会更好。
.Include(z => z.WorkPlaces).GetNonDeleted()
有人知道怎么做吗? 我尝试过这样的事情
public static class LinqExtension
public static IEnumerable<T> GetActive<T>(this IEnumerable<T> source) where T : class, IDeletable
return source.Where(x => x.IsDeleted);
谢谢大家。
【问题讨论】:
将 x=>x.WorkPlaces.Where(x=>!x.IsDeleted) 更改为 x=>x.WorkPlaces.Any(x=>!x.IsDeleted)"It doesn't work"
你有错误吗?结果与预期不同?
编译错误
@JardaLanger,你解决了这个问题吗?
是的,我在下面的链接中使用了查询过滤器docs.microsoft.com/en-us/ef/core/querying/filters
【参考方案1】:
您可以在 DbContext 中配置 查询过滤器。
modelBuilder.Entity<Administrator>()
.HasQueryFilter(admin => !EF.Property<boolean>(admin, "IsDeleted"));
应该做的伎俩
参考链接:https://docs.microsoft.com/en-us/ef/core/querying/filters
【讨论】:
【参考方案2】:您应该使用Any
而不是Where
更改内部条件,如:
.Include(z => z.WorkPlaces)
.Where(x => x.WorkPlaces.Any(y => !y.IsDeleted))
【讨论】:
也适用于非布尔字段,例如:.Where(x => x.WorkPlaces.Any(y => y.Id == 1))以上是关于.NET CORE 2 EF 包括的主要内容,如果未能解决你的问题,请参考以下文章
Azure Functions .NET Core 中的 EF Core 2.0 连接字符串
powershell EF6 .Net Core 2现有数据库
.NET Core 1.0ASP.NET Core 1.0和EF Core 1.0简介