此查询有什么问题?它通过插入删除日期可以在逻辑上删除2个实体。所以我必须确保我获得了一个SubEntities集合的Entity。所有DateDelete都不为空。
return DbContext.Entity
.AsNoTracking()
.Include(y => y.SubEntities.Select(sb => sb.DateDelete == null))
.Single(y => y.Name == entityName && y.DateDelete == null);
在运行时我得到一个异常
Include路径表达式必须引用导航属性 在类型上定义。使用虚线路径进行参考导航 属性和集合导航的Select运算符 属性。参数名称:路径
我也尝试了同样的错误
return DbContext.Entity
.AsNoTracking()
.Include(y => y.SubEntities.Where(sb => sb.DateDelete == null))
.Single(y => y.Name == entityName && y.DateDelete == null);
答案 0 :(得分:0)
在我自己调查之后,我发现无法对.Include()
进行过滤,但是使用.Select()
方法或过滤器库可以解决这些问题。
return DbContext.Entity
.AsNoTracking()
.Where(e => e.DateDelete == null)
.Select(e => new
{
e.Id,
e.Property,
e.DateDelete,
SubEntities = e.SubEntities.Where(se => se.DateDelete == null)
})
.ToList();
Gert Arnold here与EntityFramework.DynamicFilters给出的解决方案。此解决方法有一些限制。阅读文档。