Linq Query连接多个条件

时间:2017-04-27 23:46:28

标签: linq linq-to-entities

尝试执行单个查询,将来自多个联接的数据组合到单个属性

Rig
----
   RigId
   Component1Id
   Component2Id
   Component3Id


Work Item
---------
  Id
  ComponentID
  Description

我正在尝试执行一个查询,该查询返回一个带有一个名为history的属性的装备列表,该属性包含与装配中的组件关联的所有workItem。

我似乎无法在连接中执行多个条件或执行单独的连接并将项目连接到单个属性中。

所以结果就像

RigId,历史(由钻机的所有工作项列表组成)

1 个答案:

答案 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表。