具有多个子节点的父实体的EF 7查询

时间:2016-02-11 23:08:21

标签: c# asp.net entity-framework linq

提前感谢您对此的任何帮助。我们一直在玩EF7和ASP .Net 5.0(Core 1.0?),并遇到了以下障碍。

我有一个具有多个属性和子实体的应用程序模型。出于这个问题的目的,有2个子实体:ApplicationFuncArea和ApplicationLocation(关系模型,因为它有多对多的关系)。

父类:

public class Application
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Comments { get; set; }
    public string OS { get; set; }
    public string DatabaseName { get; set; }
    public string Hardware { get; set; }
    public string Documentation { get; set; }
    public ICollection<ApplicationLocation> AppLocations {a get; set; }
    public ICollection<ApplicationFuncArea> AppFuncAreas { get; set; }
    public Employee SolutionArchitect { get; set; }
    public bool IsInHouseApp { get; set; }

}

子实体非常简单:

public class ApplicationFuncArea
{
    public int Id { get; set; }

    public int AppId { get; set; }
    public Application App { get; set; }

    public int FuncAreaId { get; set; }
    public FuncArea FuncArea { get; set; }
}


public class ApplicationLocation
{
    public int Id { get; set; }

    public int AppId { get; set; }
    public Application App { get; set; }

    public int LocationId { get; set; }
    public Location Location { get; set; }
}

Application类是父类,它具有上面2个类的ICollections作为属性,如下所示:

    ...

    public ICollection<ApplicationLocation> AppLocations { get; set; }
    public ICollection<ApplicationFuncArea> AppFuncAreas { get; set; }

    ...

最终,我们尝试在父表中提取所有应用程序的列表,其中LocId(来自子ApplicationLocation实体)和FuncAreaId(来自子ApplicationFuncArea实体)等于特定值。

我原本以为这可行:

            return _context.Apps
            .Include(a => a.AppFuncAreas)
            .Include(a => a.AppLocations)
            .Where(a => a.AppFuncAreas.Any(fa => fa.FuncAreaId == FuncAreaId) && (a.AppLocations.Any(l => l.LocationId == LocId)));

然而它抛出了以下隐式转换错误:

  

严重级代码描述项目文件行抑制状态   错误CS0266无法将类型“System.Linq.IQueryable<AtlasAppPortfolio.Models.Application>”隐式转换为“System.Collections.Generic.ICollection<AtlasAppPortfolio.Models.Application>”。存在显式转换(您是否错过了演员?)

看起来应该很容易,但我似乎无法弄清楚是什么。

0 个答案:

没有答案