C# 具有多个条件的forEach内部筛选列表

C# 具有多个条件的forEach内部筛选列表,c#,C#,我创建了c#方法,根据特定条件筛选学生列表 我首先创建了filteredstudents列表,在对学生列表应用初始筛选条件后填充它 然后我创建了另一个列表filteredstudentsWithUnits,在filteredstudents 我试着把它缩短,就像使用单一列表一样,但找不到方法 有人可以建议,因为我将有额外的过滤条件,所以我真的不想创建多个列表 private List<StudentDTO> _validateStudents(List<StudentDTO&g

我创建了c#方法,根据特定条件筛选学生列表

我首先创建了
filteredstudents
列表,在对学生列表应用初始筛选条件后填充它

然后我创建了另一个列表
filteredstudentsWithUnits
,在
filteredstudents

我试着把它缩短,就像使用单一列表一样,但找不到方法

有人可以建议,因为我将有额外的过滤条件,所以我真的不想创建多个列表

private List<StudentDTO> _validateStudents(List<StudentDTO> students)
{   
    List<StudentDTO> filteredstudents = new List<StudentDTO>();
    foreach (StudentDTO student in students)
    {
        if (student.age != null && student.status != "DEL")
            filteredstudents.Add(student);
        else
            _log("create log");
    }

    List<StudentDTO> filteredstudentsWithUnits = new List<StudentDTO>();
    foreach (StudentDTO student in filteredstudents)
    {
        bool valid = true;
        foreach (SubjectTypes subjectType in student.SubjectTypes)
        {
            string value1 = subjectType.SubjectItem.Select(x => x.value1).First();
            Guid StId = _context.Items.Where(x => x.Name == value1).FirstOrDefault();

            if (StId != null)
                valid = true;
            else
            {
                valid = false;
                _log("create log");
            }
        }
        if (valid)
            filteredstudentsWithUnits.Add(student);
    }
    return filteredstudentsWithUnits;
}
private List\u验证学生(列出学生)
{   
List filteredstudents=新列表();
foreach(学生中的学生对学生)
{
如果(student.age!=null&&student.status!=“DEL”)
筛选学生。添加(学生);
其他的
_日志(“创建日志”);
}
List filteredstudentsWithUnits=新列表();
foreach(学生到学生筛选学生)
{
bool valid=true;
foreach(SubjectTypes subjectType在student.SubjectTypes中)
{
字符串value1=subjectType.SubjectItem.Select(x=>x.value1.First();
Guid StId=_context.Items.Where(x=>x.Name==value1.FirstOrDefault();
如果(StId!=null)
有效=真;
其他的
{
有效=错误;
_日志(“创建日志”);
}
}
如果(有效)
filteredstudentsWithUnits.Add(学生);
}
返回filteredstudentsWithUnits;
}

如果我正确阅读了您的代码,您可以使用以下简短的LINQ查询:

List<StudentDTO> filteredstudentsWithUnits = students
    .Where(s => s.age != null && s.status != "DEL")
    .Where(s => !_context.Items
        .Any(x => s.SubjectTypes
            .SelectMany(t => t.SubjectItem.Select(si => si.value1))
            .Contains(x.Name)))
    .ToList();
List filteredstudentsWithUnits=students
.Where(s=>s.age!=null&&s.status!=“DEL”)
.Where(s=>!\u context.Items
.Any(x=>s.SubjectTypes
.SelectMany(t=>t.SubjectItem.Select(si=>si.value1))
.Contains(x.Name)))
.ToList();

如果我正确阅读了您的代码,您可以使用以下简短的LINQ查询:

List<StudentDTO> filteredstudentsWithUnits = students
    .Where(s => s.age != null && s.status != "DEL")
    .Where(s => !_context.Items
        .Any(x => s.SubjectTypes
            .SelectMany(t => t.SubjectItem.Select(si => si.value1))
            .Contains(x.Name)))
    .ToList();
List filteredstudentsWithUnits=students
.Where(s=>s.age!=null&&s.status!=“DEL”)
.Where(s=>!\u context.Items
.Any(x=>s.SubjectTypes
.SelectMany(t=>t.SubjectItem.Select(si=>si.value1))
.Contains(x.Name)))
.ToList();

Linq是一件伟大的事情,你应该检查它的大纲NQ是一件伟大的事情,你应该检查它,它看起来真的很好,而且版本很短,但只会发出“我将丢失每个不满足条件的日志记录”。基本上,我想记录一些信息为每个条件不满足。有一个在linq除了看看。蒂姆写道,它会给你那些不符合条件的人。然后你可以把它们记录下来。这个版本看起来很好,很短,但只会出现“我会因为每个不满足的条件而丢失记录”的问题。基本上,我想记录一些信息为每个条件不满足。有一个在linq除了看看。蒂姆写道,它会给你那些不符合条件的人。然后你可以记录它们。