gpt4 book ai didi

entity-framework - Entity Framework 包含条件

转载 作者:行者123 更新时间:2023-12-04 07:23:30 25 4
gpt4 key购买 nike

我需要根据 id 和未完成的签到过滤经销商

最初,它仅根据 id 返回经销商:

    // TODO: limit checkins to those that are not complete
return this.ObjectContext.Dealers
.Include("Groups")
.Include("Groups.Items")
.Include("Groups.Items.Observations")
.Include("Groups.Items.Recommendations")
.Include("Checkins")
.Include("Checkins.Inspections")
.Include("Checkins.Inspections.InspectionItems")
.Where(d => d.DealerId == id)
.FirstOrDefault();

如您所见,要求是限制 checkin 。
这是我所做的:
var query = from d in this.ObjectContext.Dealers
.Include("Groups")
.Include("Groups.Items")
.Include("Groups.Items.Observations")
.Include("Groups.Items.Recommendations")
.Include("Checkins.Inspections")
.Include("Checkins.Inspections.InspectionItems")
.Where(d => d.DealerId == id)
select new
{
Dealer = d,
Groups = from g in d.Groups
select new
{
Items = from i in g.Items
select new
{
Group = i.Group,
Observations = i.Observations,
Recommendations = i.Recommendations
}
},
Checkins = from c in d.Checkins
where c.Complete == true
select new
{
Inspections = from i in c.Inspections
select new
{
InspectionItems = i.InspectionItems
}
}

};

var dealer = query.ToArray().Select(o => o.Dealer).First();

return dealer;

有用。
但是,我不相信我在做正确的事情。

完成我所做的最好的方法是什么?可能是存储过程?

我不确定我什至必须再使用 Include 子句

谢谢你。

最佳答案

如果你想用单个查询加载过滤的关系,你确实必须执行这样的投影,但你不需要那些对 Include 的调用。 .一旦您构建了投影,就不会使用包含 - 您已经在您的控制下返回了数据。

只有当您回退到普通 ADO.NET 时,存储过程才会对您有所帮助,因为通过 Entity Framework 执行的存储过程无法填充相关实体(只有扁平结构)。

@Andreas 提到的自动修复需要多个数据库查询,据我所知它只有在禁用延迟加载时才有效,因为代理对象不知何故没有关于修复的信息,并且每个关系的内部标志仍然没有加载,所以当您访问时他们第一次仍然执行额外的查询。

关于entity-framework - Entity Framework 包含条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6700332/

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