【发布时间】:2015-02-23 23:02:08
【问题描述】:
我正在寻找有关 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
}
Once 可以通过以下方式模拟示例数据:
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();
返回 ANY.. 但是我错过了如何过滤 MyEvaluations 的列表..
在我的示例/示例数据中,我想查询 ParentList 中 ResultType = enumResultType.B; 的所有情况
所以希望得到一个相同类型的列表,但没有等于ResultType.A 或.C 的“评估”
根据虚拟数据,我希望得到的东西会:
returnList.Count() - 2 个项目 (Stage1 / Stage2) 并在该 Stage1 内 --> foreach (item.Result : 10, 11 Stage2 --> foreach (item.Result : 20
这是否可以在不使用新匿名类型的投影的情况下完成,因为我希望列表保持整洁,以便稍后在 DataBinding 中使用,并且我会迭代许多 ResultTypes?
感觉我错过了一些相当简单但对 LINQ 和 lambda 表达式来说相当新的东西。
【问题讨论】:
标签: linq list c#-4.0 lambda nested