我不知道是否有可能按照我的想法行事,但我觉得值得尝试:)
我可以将这两个嵌套的foreach结合起来吗?
foreach ( var dept in curDevice.Personnel.Department.Company.Departments )
{
foreach ( var personnel in dept.Personnels )
{
myPersonnels.Add(personnel);
}
}
我想将每个嵌套为一个链式linq表达式。有可能吗?如果是这样的话?
答案 0 :(得分:5)
foreach ( var personnel in
curDevice.Personnel.Department.Company.Departments.SelectMany(x=> x.Personnels))
{
myPersonnels.Add(personnel);
}
答案 1 :(得分:3)
使用SelectMany<TSource, TResult>
方法:
var allPersonnel = curDevice.Personnel.Department.Company.Departments.SelectMany(dept => dept.Personnels);
// If there is no AddRange method:
foreach (var personnel in allPersonnel)
myPersonnels.Add(personnel);
// If there is an AddRange method:
myPersonnels.AddRange(personnel)
答案 2 :(得分:2)
这是人员偏好(看看我在那里做了什么?),但我喜欢坚持功能编程,如果这是我的开始。
您可以使用foreach
方法替换List<T>.ForEach
语言构造。
curDevice.Personnel.Department.Company.Departments
.SelectMany(department => department.Personnels)
.ToList()
.ForEach(personnel => myPersonnels.Add(personnel);
通常,我们会为委托使用较短的参数名称:
curDevice.Personnel.Department.Company.Departments
.SelectMany(d => d.Personnels)
.ToList()
.ForEach(p => myPersonnels.Add(p);
而且,如果myPersonnels
只是一个集合,您可以直接创建它:
var myPersonnels = curDevice.Personnel.Department.Company.Departments
.SelectMany(d => d.Personnels)
.ToList();
或者,如果它已经是List<T>
,您可以为其添加IEnumerable<T>
:
myPersonnels.AddRange(
curDevice.Personnel.Department.Company.Departments
.SelectMany(d => d.Personnels)
);
答案 3 :(得分:1)
Ken几乎是正确的,但是如果我是对的,myPersonnels列表是一个外部的列表,您要复制“查询”的结果。前两个答案非常易读,但如果您想稍后编写代码,可以写下:
curDevice.Personnel.Department.Company.Departments
.SelectMany(x => x.Personnels) // selecting the personnels
.ToList()
.Foreach(myPersonnels.Add); // iterate trough the personnels list and copy them into the external list