使用LINQ循环外部类集合中的内部类属性,并通过外部类属性进行分组

时间:2014-09-27 05:53:41

标签: c# linq group-by

利用Q& As处理循环对象的属性(Loop Through An Objects Properties In C#Using LINQ to loop through inner class properties in outer class collection),您可以在哪里:

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

你好吗:

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

请在下面找到相关课程的粗略地图。

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

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; }
}

1 个答案:

答案 0 :(得分:0)

Just Loop:

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;
    }
}