gpt4 book ai didi

c# - Linq SelectMany 包含父级

转载 作者:太空狗 更新时间:2023-10-29 21:57:02 27 4
gpt4 key购买 nike

我有以下三个 Linq To Sql 实体:Location、Institution 和 Building。

Location 表只是一个 LocationId 和 LocationTypeId。

Institution 和 Building 都以一对一的关系从 Location 表中获取它们的 ID,而 Institution 表与 Building 表具有一对多的关系。

我正在尝试返回机构及其所有子机构的所有位置记录。以下查询返回我需要的内容,只是它缺少父机构位置记录。

var query = dc.Locations.SelectMany(l => l.Institutions, (loc, inst) => new { loc, inst })
.SelectMany(i => i.inst.Buildings, (locInst, bld) => bld.Location );

如何将父项与子项一起包含在内?

ERD with relevant columns

更新:

如果我在原始位置查询上使用联合,我可以获得我想要的记录,但我仍然想知道这是否是最佳解决方案。这是 Union 的代码。

IQueryable<Location> locations = dc.Locations;

locations.SelectMany(l => l.Institutions, (loc, inst) => new { loc, inst })
.SelectMany(i => i.inst.Buildings, (locInst, bld) => bld.Location)
.Union(locations);

最佳答案

好吧,这是一个棘手的问题,我认为没有比这更好的了,尽管如果你想要某种排序,比如第一个是机构位置,然后是机构建筑位置,你可以这样做:

locations.SelectMany(l => l.Institutions, (loc, inst) => new { loc, inst })
.SelectMany(i => i.inst.Buildings.Union(new List<Building> { new Building { Location = i.loc } }), (locInst, bld) => bld.Location);

但是代码并没有从这里变得更清晰,您的解决方案非常简单并且可以完成工作。

这会影响性能并会消耗更多内存(如果重要的话),但是如果这正是您正在寻找的,我希望它对您有所帮助。 (因为位置的存储顺序)

关于c# - Linq SelectMany 包含父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34321892/

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