2014-09-27 73 views
1

利用关闭第q &作为处理通过一个对象的属性(Loop Through An Objects Properties In C#Using LINQ to loop through inner class properties in outer class collection),在这里有循环在外部类收集和组内的类属性使用LINQ循环:通过外类属性

  • Class1的对象的集合(即listObj1)
  • 各1类所包含的属性和等级2对象的集合(即dictObj2)

你将如何:

  • 有效地确定内部类的(等级2)
  • 循环通过内部类的(等级2)
  • 循环通过的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; } 
} 

回答

0

只是循环:

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