#c#
#c#
Вопрос:
Я создал метод 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 amp;amp; 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;
}
Комментарии:
1. Linq — отличная вещь, вы должны это проверить
Ответ №1:
Если я правильно прочитал ваш код, вы могли бы использовать этот короткий запрос LINQ:
List<StudentDTO> filteredstudentsWithUnits = students
.Where(s => s.age != null amp;amp; s.status != "DEL")
.Where(s => !_context.Items
.Any(x => s.SubjectTypes
.SelectMany(t => t.SubjectItem.Select(si => si.value1))
.Contains(x.Name)))
.ToList();
Комментарии:
1. Это кажется действительно хорошей и короткой версией, но выдает только «Я потеряю ведение журнала для каждого условия, которое не удовлетворяет». В принципе, я хотел бы записать некоторую информацию для каждого условия, которое не удовлетворяет.
2. Взгляните на linq за исключением. Это даст вам тех, кто не выполняет условия, которые написал @Tim. Затем вы можете записать их в журнал.