У меня есть список "StudentList" (есть несколько записей) У меня есть другой список "CourseList" (содержит более одной записи) StudentList (1) - (*) CourseList [Отношения]

Я хочу получить запись с идентификатором курса (столбец из списка курсов) = 1000;

Что я пробовал, но не могу выполнить.

        var viewmodel = StudentList.Select(x => x.CourseList.Where(y => y.courseID == "1000"));

Заранее спасибо!

0
Wai Yan Maung Oo 23 Ноя 2020 в 05:49

2 ответа

Лучший ответ

Вот ответ, который вы искали,

var viewmodel = StudentList.SelectMany(x => x.CourseList.Where(y => y.courseID == "1000")).FirstOrDefault();

Поскольку вы проявили интерес к тому, как это работает и что делает selectMany, я немного пояснил, хотя я уже ответил на ваш вопрос в разделе комментариев,

  1. Первое, на что следует обратить внимание, раздел x.CourseList.Where (y => y.courseID == "1000") будет вернуть список курсов с идентификатором 1000. Даже если курс один, он будет список.

  2. Если мы получаем список курсов с идентификатором 1000 для каждого отдельного студента, мы в конечном итоге получить список списка курсов (при использовании выбора).

  3. Итак, здесь selectMany сглаживает 'Список списков курсов' до 'Список курсов' с помощью слияние всех внутренних курсов.

  4. Наконец, FirstOrDefault () обязательно вернет единственный объект курса, идентификатор которого 100, и это необходимый вам результат.

Примечание: хотя я использовал термин List, вы можете иметь дело с IEnumerable

Надеюсь, вы и все, кто приземлится здесь, найдете это полезным.

2
BaldevBhattarai 23 Ноя 2020 в 05:37

Вы можете попробовать этот метод

var result = students.Where(x=>isExistCourse(x));
public static bool isExistCourse(Student student)
    {
        foreach(var item in student.Courses)
        {
            if(item.Id==1000)
                return true;
        }
        return false;
    }

Если вы хотите получить только одну запись, вы можете заменить where на FirstOrDefault

0
ichPotatodeCXY 23 Ноя 2020 в 03:50