gpt4 book ai didi

c# - 包含和选择在一起的 Entity Framework

转载 作者:太空狗 更新时间:2023-10-29 19:40:52 26 4
gpt4 key购买 nike

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

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]

我的任务是获取单个 Program 及其相关 ProgramFoodTypes 条件 ProgramFoodType should be active 和 ProgramFoods 及其相关实体 Food FoodType

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

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

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

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

最佳答案

对于你的第二个解决方案,我认为你可以使用:

var program = (from p in mEntities.Programs
.Include(p => p.ProgramFoods.Select(f => f.Food))
.Include(p => p.ProgramFoods.Select(f => f.FoodType))
where p.Id == Id
select new {
Program = p,
ProgramFoodTypes = from pf in p.ProgramFoodTypes
where pf.IsActive
select pf,
p.ProgramFoods
}).ToArray().Select(m => m.Program);

更新:由于您在 linq 查询中使用匿名类型,Include statements are dismissed.
您必须在客户端加载所有相关的 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))
.SingleOrDefault(m => m.Id == Id);

program.ProgramFoodTypes = program.ProgramFoodTypes.Where(pft => pft.IsActive);

您可以使用 AsNoTracking() 或在新对象中克隆返回的 Program 对象,以确保您的数据在数据库端完好无损。

关于c# - 包含和选择在一起的 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31291491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com