我正在尋找一些幫助與LINQ查詢來篩選自定義對象的屬性/枚舉是在嵌套列表,並希望維護返回列表中的父對象。LINQ返回在嵌套列表中的子對象的屬性上過濾的對象列表<>
例如/透明度/樣本代碼,我有一個父對象,它具有在其一個列表基於類和下面枚舉:
public class Stage {
public String Name { get; set;}
public List<Evaluation> MyEvaluations { get; set;}
}
public class Evaluation {
public float Result { get; set; }
public enumResultType ResultType { get; set; }
}
public enum enumResultType {
A,B,C
}
一旦可以模擬連同類似的那些行的示例數據:
List<Stage> ParentList = new List<Stage>();
Stage Stage1 = new Stage() { Name = "Stage1",
MyEvaluations = new List<Evaluation>() {
new Evaluation() { ResultType = enumResultType.A, Result=5 },
new Evaluation() { ResultType = enumResultType.B, Result=10},
new Evaluation() { ResultType = enumResultType.B, Result=11},
new Evaluation() { ResultType = enumResultType.C, Result=5}
}};
Stage Stage2 = new Stage() { Name = "Stage2",
MyEvaluations = new List<Evaluation>() {
new Evaluation() { ResultType = enumResultType.A, Result=10},
new Evaluation() { ResultType = enumResultType.B, Result=20},
new Evaluation() { ResultType = enumResultType.C, Result=20}}};
ParentList.Add(Stage1);
ParentList.Add(Stage2);
我希望能夠通過LINQ做的是從Parentlist
對象選擇,都只有一個過濾列表中的項目,其中在評估名單的ResultType
匹配適當的條件... 我不想重複父對象多次(看到selectmany
),而是MyEvaluations
的篩選下拉列表,其中ResultType
匹配,並且如果此列表包含項目(它會)返回與家長。
我玩:
ParentList.Select(x => x.MyEvaluations.FindAll(y => y.ResultType==enumResultType.B)).ToList();
然而,這僅返回內部列表...而
ParentList.Where(x => x.MyEvaluations.Any(y => y.ResultType==enumResultType.B)).ToList();
任何回報。但是我缺少如何獲得MyEvaluations
列表被過濾下來..
在我的示例/示例數據,我想查詢查詢ParentList的所有情況,其中ResultType = enumResultType.B;
所以會期望得到相同類型的列表,但沒有「評估」,這等於基於虛擬數據ResultType.A
或.C
,我希望可以得到一些東西,將有:
returnList.Count() - 2項(階段1/2階段),並且1階段內 - >的foreach(item.Result:10,11 2階段 - >的foreach(item.Result:20
可這是因爲我希望保持清單的清晰和美觀,因爲後來在i上使用了新的匿名類型DataBinding和我迭代了很多ResultTypes?
感覺我錯過了一些相當簡單的東西,但對於LINQ和lambda表達式來說還是比較新的。
謝謝!是的,這是有道理的!我曾經拒絕創建一個新對象,因爲認爲可能有一種更有效的方法,只是通過一個過濾器對原始列表進行過濾,但這很有效。內聯替換修改了列表,所以不能用於我的情況,因爲我必須基於不同的EnumResultTypes對父列表進行數據綁定,但創建新列表適用於我的用例場景。 – Nic 2015-02-24 01:55:24