2016-10-17 2 views
0

특정 조건을 기반으로 학생 목록을 필터링하는 C# 메서드를 만들었습니다.여러 개의 조건이있는 forEach 내부의 목록 필터링

처음으로 학생 목록에 초기 필터 조건을 적용한 후 채우기 위해 filteredstudents 목록을 생성했습니다.

그럼 내가 하나의 목록을 사용하여 같은이 짧은 만들려고 filteredstudents

에 필터를 적용한 후 채울 다른 목록 filteredstudentsWithUnits을 생성하지만, 방법을 찾아 올 수 없었다.

다른 필터 조건이 있기 때문에 누군가 제안 할 수 있습니까? 그래서 나는 실제로 여러 목록을 만들고 싶지 않습니다.

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; 
} 
+0

Linq에, 당신은 정말 좋은 짧은 버전 만 문제를 보인다 – SJFJ

답변

1

내가 코드를 읽으면 제대로이 짧은 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(); 
+0

그것을 대단한 일을 확인해야한다 만족하지 않는 각 조건에 대한 로깅을 잃어 버릴 것입니다. " 기본적으로 나는 만족하지 않는 각 조건에 대한 정보를 기록하고 싶습니다. – simbada

+0

linq를 제외하고보십시오. @Tim이 쓴 조건을 충족시키지 못하는 사람들을 줄 것입니다. 그런 다음 로그 할 수 있습니다. – SJFJ