Сравните 2 свойства в 2 отдельных списках - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть 2 отдельных списка курсов.1 Список текущих курсов, а другой список отфильтрованных курсов.Я хочу сравнить список, и если курс существует или его нет, я хочу пометить логическое значение в списке FilteredCourse как true или false.Ниже приведен пример кода.

var currentCourses = new List<Course>
        {
            new Course{CourseNumber = "101", CourseSubject = "ART"},
            new Course{CourseNumber = "201", CourseSubject = "BIO"},
            new Course{CourseNumber = "301", CourseSubject = "CHEM"},
            new Course{CourseNumber = "401", CourseSubject = "CPSC"}
        };

        var filteredCourses = new List<Course>
        {
            new Course{CourseNumber = "101", CourseSubject = "ART"},
            new Course{CourseNumber = "401", CourseSubject = "CPSC"},
            new Course{CourseNumber = "501", CourseSubject = "DANC"},
            new Course{CourseNumber = "701", CourseSubject = "HIST"}
        };

Я пробовал:

foreach (var course in currentCourses)
        {
            foreach (var filteredCourse in filteredCourses)
            {
                if ((filteredCourse.CourseNumber === course.CourseNumber) && (filteredCourse.CourseSubject === course.CourseSubject))
                {
                    filteredCourse.AlreadyExists = true;
                }
                else
                {
                    filteredCourse.AlreadyExists = false;
                }
            }
        }

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вы можете использовать LINQ:

foreach (var f in filteredCourses)
{
  f.AlreadyExists = currentCourses.Any(c => (c.CourseNumber == f.CourseNumber 
    && c.CourseSubject == f.CourseSubject));
}
0 голосов
/ 11 февраля 2019

Вы должны установить все флаги на false в начале, затем запустить свой цикл и устанавливать флаг true только тогда, когда найдено совпадение.Если вы запустите текущий код, он пройдет все курсы, и если соответствующий не последний, флаг всегда будет установлен в false, даже если он уже был установлен в true.

Вы также можетевырваться из цикла, когда совпадение найдено.

Так что-то вроде:

foreach (var filteredCourse in filteredCourses)
    filteredCourse.AlreadyExists = false;

foreach (var course in currentCourses)
{
    foreach (var filteredCourse in filteredCourses)
    {
        if ((filteredCourse.CourseNumber == course.CourseNumber) && (filteredCourse.CourseSubject == course.CourseSubject))
        {
            filteredCourse.AlreadyExists = true;
            break;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...