我有以下三个Linq To Sql实体:Location、Institution和Building。
Location表只包括LocationId和LocationTypeId两列。
Institution和Building都通过一对一的关系从Location表中获取它们的Ids,并且Institution表与Building表之间有一对多的关系。
我想返回一个机构及其所有子级的所有位置记录。以下查询返回我需要的内容,但是缺少父机构位置记录。
var query = dc.Locations.SelectMany(l => l.Institutions, (loc, inst) => new { loc, inst })
.SelectMany(i => i.inst.Buildings, (locInst, bld) => bld.Location );
我该如何将父项与其子项一起包含?
更新:
如果在原始位置查询上使用联合,我可以获取想要的记录,但我仍然想知道这是否是最佳解决方案。 这是使用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);
Concat
而不是Union
。虽然我不能确定,但我相信Concat
将映射到SQL中的Union All
,这将更具性能。 - erdomkeConcat
确实在SQL中映射到Union All
,但是,在我的情况下,我确实希望得到不同的值。 - user2023116