LINQ - GroupBy over many-to-many relationship

时间:2017-10-02 08:23:14

标签: c# linq group-by many-to-many

如何编写GroupBy子句,它将从多个关系中检索多个记录?

我有以下结构:

 public class Failure{
    public virtual int IdFailure { get; set; }
    public virtual Workstation Workstation{ get; set; }
 }

 public class Workstation{
    public virtual int IdWorkstation { get; set; }
    public virtual IList<WorksocketWorkstation> WorksocketWorkstation { get; set; }
 }

 public class WorksocketWorkstation{
    public virtual int IdWorksocketWorkstation{ get; set; }
    public virtual Worksocket Worksocket{ get; set; }
    public virtual Workstation Workstation{ get; set; }
 }

 public class Worksocket {
    public virtual int IdWorksocket { get; set; }
    public virtual IList<WorksocketWorkstation> WorksocketWorkstation { get; set; }
 }

我想要做的是通过相关的工程包对故障进行分组,包括由多对多关系产生的“重复”,所以如果我在分配给三个工作区的工作站上发生故障,我希望它被计算在内每个工作区。目前我正在使用这样的东西来获得我的结果:

GetFailures().GroupBy(g => g.Workstation.WorksocketWorkstation.FirstOrDefault().Worksocket.IdWorksocket)

但是因为我正在使用FirstOrDefault,所以每个失败仅考虑单个Worksocket。我尝试使用SelectMany代替或者从Worksockets端获取数据,基于此处已经回答的类似问题,但我无法理解任何想法并将其调整为我的需求,所以任何帮助或解释将不胜感激。

1 个答案:

答案 0 :(得分:1)

GetFailures().SelectMany(g => g.Workstation.WorksocketWorkstation)
             .GroupBy(g => g.Worksocket.IdWorksocket)
相关问题