包含和选择的实体框架

Mon*_*nah 9 c# asp.net-mvc entity-framework ef-code-first

我有以下实体(伪代码以节省空间)

Program [ int Id, 
          string Name, 
          List<ProgramFoodType> ProgramFoodTypes, 
          List<ProgramFood> ProgramFoods]

ProgramFoodType[ int Id, int ProgramId, int Type, bool IsActive]
ProgramFood [ int Id, int ProgramId, Food Food, FoodType FoodType]
Food [int Id, string Name]
FoodType [int Id, string Name]
Run Code Online (Sandbox Code Playgroud)

我的任务是单独ProgramProgramFoodTypes条件相关ProgramFoodType应该是活动的并且ProgramFoods与相关的实体FoodFoodType

到目前为止我使用了以下内容

1 -下面的查询将检索的细节ProgramFoodTypesProgramFoods,但它会带来所有活动和非活动ProgramFoodTypes

var program = mEntities.Programs
                          .Include(p =>p.ProgramFoodTypes)
                          .Include(p =>p.ProgramFoods.Select(f =>f.Food))
                          .InClude(p =>p.ProgramFoods.Select( f =>f.FoodType))
                          .Where(m =>m.Id== Id);
Run Code Online (Sandbox Code Playgroud)

2-以下查询将检索详细信息但缺少FoodFoodType

var program = (from p in mEntities.Programs
              where p.Id ==Id
              select new {
                 Program = p,
                 ProgramFoodTypes = from pf in p.ProgramFoodTypes
                                    where pf.IsActive
                                    select pf,                  
                 ProgramFoods = p.ProgramFoods // here i can't add include statement
              }).ToArray().Select(m => m.Program);
Run Code Online (Sandbox Code Playgroud)

如何在第二个查询中包含食物和食物类型?

tsc*_*007 3

或许:

var program = (from p in mEntities.Programs
          where p.Id ==Id
          select new {
             Program = p,
             ProgramFoodTypes = from pf in p.ProgramFoodTypes
                                where pf.IsActive
                                select pf,                  
             ProgramFoods = p.ProgramFoods.Select(y => new {
                 Food = y.Food,
                 Type = y.FoodType
             }) 
          }).ToArray().Select(m => m.Program);
Run Code Online (Sandbox Code Playgroud)