尝试执行单个查询,将来自多个联接的数据组合到单个属性
中Rig
----
RigId
Component1Id
Component2Id
Component3Id
Work Item
---------
Id
ComponentID
Description
我正在尝试执行一个查询,该查询返回一个带有一个名为history的属性的装备列表,该属性包含与装配中的组件关联的所有workItem。
我似乎无法在连接中执行多个条件或执行单独的连接并将项目连接到单个属性中。
所以结果就像
RigId,历史(由钻机的所有工作项列表组成)
答案 0 :(得分:0)
以下是查询语法的答案:
var ans = from r in Rigs
join w in WorkItems on r.Component1ID equals w.ComponentID into wg1
join w in WorkItems on r.Component2ID equals w.ComponentID into wg2
join w in WorkItems on r.Component3ID equals w.ComponentID into wg3
select new { r.RigID, History = wg1.Concat(wg2).Concat(wg3).ToList() };
如果您愿意,可以使用lambda语法(这有点难......)
var ans2 = Rigs.GroupJoin(WorkItems, r => r.Component1ID, w => w.ComponentID, (r, w1g) => new { r, h1 = w1g.ToList() })
.GroupJoin(WorkItems, rh1 => rh1.r.Component2ID, w => w.ComponentID, (rh1, w2g) => new { rh1.r, h2 = rh1.h1.Concat(w2g.ToList()) })
.GroupJoin(WorkItems, rh2 => rh2.r.Component3ID, w => w.ComponentID, (rh2, w3g) => new { rh2.r.RigID, History = rh2.h2.Concat(w3g.ToList()) });
如果一个非常好的主意,我不认为使用列组件 - 当Rig有多于或少于3个组件时会发生什么?你应该有一个单独的RigComponent表。