使用LINQ循环遍历外部类集合中的内部类属性,并按外部类属性分组

本文关键字:属性 外部 内部类 循环 LINQ 遍历 集合 使用 | 更新日期: 2023-09-27 18:24:56

利用问答;与处理循环通过对象的属性(在C#中循环通过对象属性和使用LINQ循环通过外部类集合中的内部类属性)一样,您有:

  • Class1对象的集合(即listObj1)
  • 每个Class1都包含属性和Class2对象的集合(即dictObj2)

如何:

  • 有效地确定内部类(Class2)的属性
  • 循环内部类(Class2)的属性
  • 循环遍历Class1对象的集合(listObj1),选择Class2属性的所有实例
  • 输出Class2属性的集合(例如,第一次迭代将返回MeasurementA的集合,每个Class1对象一个)
  • 并且按Class1.PropertyA和Class1.PropertyB对集合进行分组

请在下面找到相关课程的大致地图。

我一直在尝试使用LINQ查询,但没有成功。Konrad Kokosa提供的答案是大部分。任何想法或指导都将不胜感激。

class MainClass {
  List<Class1> listObj1
}
class Class1 {
  // a number of fields including...
  int PropertyA { get; set; }
  int PropertyB { get; set; }
  Dictionary<int, Class2> dictObj2 { get; set; }
}
class Class2 {
  // a number of fields all of type double...
  double MeasurementA { get; set; }
  double MeasurementB { get; set; }
  double MeasurementC { get; set; }
}

使用LINQ循环遍历外部类集合中的内部类属性,并按外部类属性分组

仅循环:

foreach(var cls1 in listObj1)
{
    int tempA = cls1.PropertyA;
    foreach(var cls2 in cls1.dictObj2)
    {
         double tempB = cls2.MeasurementB;
    }
}

过滤/高效环路:

foreach(var cls1 in listObj1.Where(c1=> c1.PropertyA > 5 && c1.PropertyB > 3))
{
    int tempA = cls1.PropertyA;
    foreach(var cls2 in cls1.dictObj2.Where(c2=> c2.MeasurementA >= 10))
    {
         double tempB = cls2.MeasurementB;
    }
}