2014-09-27 61 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; 
    } 
}