【发布时间】:2015-12-16 20:51:36
【问题描述】:
我有以下三个 Linq To Sql 实体:位置、机构和建筑物。
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 );
如何将父母和孩子一起包括在内?
更新:
如果我在原始位置查询上使用联合,我可以获得我想要的记录,但我仍然想知道这是否是最佳解决方案。这是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);
【问题讨论】:
-
你能发布实体类吗?至少足以显示它们之间的关系?
-
@DanNixon 我已经添加了带有相关列的实体类的图像
-
最好使用
Concat而不是Union,除非你实际上做了不同的值而不是简单的连接。虽然我不确定,但我相信Concat会映射到 SQL 中的Union All,这样会更高效。 -
@erdomke 你是对的,
Concat确实映射到 SQL 中的Union All,但是,就我而言,我确实想要不同的值。
标签: c# linq sql-server-2008 linq-to-sql parent-child