Linq的复杂分组? C#.NET

时间:2015-09-19 16:10:31

标签: c# linq

人,

我有几个相互关联的实体:

public class MainObject {
    public Guid property1; //one-to-many relationship
    public Guid? property2;
    public int? property3;
    public List<PivorObject> PivotObjects; //one-to-many relationship
}

public PivotObject {
    public Guid property4; //one-to-many relationship
    public long property5;
    public long property6;
}

我需要使用以下条件对List<MainObject>进行分组:

  1. 相同property1 AND

  2. 相同property2 AND

  3. 相同property3 AND

  4. 相同PivotObjects.FirstOrDefault(po => po.property5 == criterion1 && po.property6 == criterion2).Select(po => po.property4)PivotObjects.FirstOrDefault(po => po.property5 == criterion1 && po.property6 == criterion2) == null

  5. 在结果中,我希望通过此组合分隔初始列表所需的MainObject堆。因此,在可空类型为null的情况下,它们与其他空值的评估方式相同。

    是否有一种优雅的方式来制作这样的分组?

    我问的是除了groupby property1之外的解决方案,在property2的结果组中,等等。我正在寻找可以吐出我需要的堆的本地东西。所以可能是一个有4个键或类似东西的字典。

1 个答案:

答案 0 :(得分:0)

我错过了什么吗?不只是:

var MainObject.GroupBy(m=>new { 
  m.Property1,
  m.Property2,
  m.Property3,
  m.PivotObjects.FirstOrDefault(po => po.property5 == criterion1 && po.property6 == criterion2)?.property4)
});