LinQ查询包含有条件的孩子的实体

时间:2016-11-24 11:37:08

标签: c# linq

此查询有什么问题?它通过插入删除日期可以在逻辑上删除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);

1 个答案:

答案 0 :(得分:0)

在我自己调查之后,我发现无法对.Include()进行过滤,但是使用.Select()方法或过滤器库可以解决这些问题。

解决方法1

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();

解决方法2

Gert Arnold hereEntityFramework.DynamicFilters给出的解决方案。此解决方法有一些限制。阅读文档。