我有以下三个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 );
如何将父母与孩子一起包括在内?
更新
如果我在原始位置查询上使用联合,我可以获得我想要的记录,但我仍然想知道这是否是最佳解决方案。这是联盟的代码。
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);
答案 0 :(得分:0)
这是一个棘手的问题,我认为它不会变得更好,尽管如果你想要某种排序,比如第一个机构位置,那么机构建筑物位置你可以这样做:
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);
但是代码没有从这里得到任何清洁,你的解决方案非常简单,它完成了工作。
这会影响性能并消耗更多内存(如果重要的话)但是如果这是你正在寻找的,我希望它有所帮助。 (由于存储位置的顺序)