2016-10-17 21 views
0

私は特定の条件に基づいて学生のリストをフィルタリングするためのC#メソッドを作成しました。フィルターリストの中に複数の条件がある場合

最初に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

関連する問題