C# 如何将多个嵌套foreach组合到on-Linq查询中
我不熟悉C# 如何将多个嵌套foreach组合到on-Linq查询中,c#,linq,foreach,C#,Linq,Foreach,我不熟悉linq查询。是否有一种方法可以将这些嵌套的foreachs组合到一个linq查询中 如果没有,在这种情况下是否有更好的更新方法 多谢各位 List<Student> StudentList = new List<Student>(); List<int> IDsList = new List<int>(); foreach (var id in IDsList) { foreach (
linq
查询。是否有一种方法可以将这些嵌套的foreach
s组合到一个linq
查询中
如果没有,在这种情况下是否有更好的更新方法
多谢各位
List<Student> StudentList = new List<Student>();
List<int> IDsList = new List<int>();
foreach (var id in IDsList)
{
foreach (var st in StudentList.Where(a => a.StudentID == id))
{
foreach (var cr in st.Courses)
{
cr.Projects.Where(b => string.IsNullOrEmpty(b.ProjectName) == true).ToList().ForEach(c => c.ProjectName = "Dummy");
}
}
}
public class Student
{
public string FirstName { get; set; }
public int StudentID { get; set; }
public List<course> Courses { get; set; }
}
public class course
{
public int CourseID { get; set; }
public string Description { get; set; }
public List<CourseProjects> Projects { get; set; }
}
public class CourseProjects
{
public string ProjectName { get; set; }
public int ProjectID { get; set; }
}
List StudentList=newlist();
List IDsList=新列表();
foreach(IDsList中的变量id)
{
foreach(StudentList.Where中的var st(a=>a.StudentID==id))
{
foreach(圣课程中的var cr)
{
其中(b=>string.IsNullOrEmpty(b.ProjectName)==true.ToList().ForEach(c=>c.ProjectName=“Dummy”);
}
}
}
公立班学生
{
公共字符串名{get;set;}
公共int StudentID{get;set;}
公共列表课程{get;set;}
}
公共课
{
public int CourseID{get;set;}
公共字符串说明{get;set;}
公共列表项目{get;set;}
}
公共课程计划
{
公共字符串ProjectName{get;set;}
公共int ProjectID{get;set;}
}
您可以将每个嵌套的foreach替换为selectMany
StudentList.Where(s => IDsList.Contains(s.StudentID)).SelectMany(f => f.Courses).SelectMany(p => p.Projects).Where(b => string.IsNullOrEmpty(b.ProjectName)).ToList().
ForEach(c => c.ProjectName = "Dummy");
is是否真的是更新列表的更好方法仍有争议。您可以用selectMany替换每个嵌套的foreach
StudentList.Where(s => IDsList.Contains(s.StudentID)).SelectMany(f => f.Courses).SelectMany(p => p.Projects).Where(b => string.IsNullOrEmpty(b.ProjectName)).ToList().
ForEach(c => c.ProjectName = "Dummy");
is是否真的是更新列表的更好方法仍有争议。您使用Linq
ForEach
表明您知道如何实现这一点的基本知识,但在不无法阅读您所写内容和理解/确保其逻辑是您试图实现的逻辑的情况下,正在努力应用它。这表明您不应该使用一系列的ForEach
lambdas,因为人类的易读性在编程中与执行一样重要。如果你不能阅读你写的东西,你应该假设下一个看到你的代码的人也不会。你使用LinqForEach
表明你知道如何做到这一点的基本知识,但在不无法阅读你写的东西的情况下努力应用它,并理解/确保它的逻辑是你想要达到的。这表明您不应该使用一系列的ForEach
lambdas,因为人类的易读性在编程中与执行一样重要。如果你不能阅读你写的东西,你应该假设下一个看到你的代码的人也看不到。最好用IDsList
HashSet
,而不是List
。如果不具体化,这不会崩溃吗?因为您在枚举过程中编辑项目名称。@user6144226否。我们没有更改正在枚举的集合的内容,我们正在更改正在枚举的内容的属性。@Evk是的,在大多数情况下,使用哈希集可能会执行得更好,尤其是当任一列表较大时。@RobertMcKee谢谢,它让我思考,因为属性在Where子句中,我猜这没问题,因为迭代只是向前的?最好是使IDsList
哈希集
而不是列表
。如果不具体化,这个会崩溃吗?因为您在枚举过程中编辑项目名称。@user6144226否。我们没有更改正在枚举的集合的内容,我们正在更改正在枚举的内容的属性。@Evk是的,在大多数情况下,使用哈希集可能会执行得更好,尤其是当任一列表较大时。@RobertMcKee谢谢,它让我思考,因为属性在Where子句中,我猜这没关系,因为迭代只是向前的?