Linq中的复杂分组?C#.net

本文关键字:net 复杂 Linq | 更新日期: 2023-09-27 18:13:43

各位,

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

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

因此,我希望有尽可能多的MainObject堆,以通过这种组合来分隔初始列表。因此,在可为null的类型为null的情况下,它们的计算结果与其他null相同。

有没有一种优雅的方式来产生这样的分组?

我正在询问除按属性分组1之外的解决方案,按属性分组2内部的解决方案等等。我正在寻找能够吐出我需要的堆的本地解决方案。所以可能是一个有4个键的字典或类似的东西。

Linq中的复杂分组?C#.net

我遗漏了什么吗?不只是:

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