Из списка объектов, Как получить список из c базы значений параметра объекта в другом значении параметра - PullRequest
1 голос
/ 08 мая 2020

Не уверен, что делаю что-то не так. Я искал inte rnet, как эффективно получить список значений свойств, основанных на другом свойстве, с использованием лямбда.

Допустим, у меня есть список классов с именем учителя и идентификатором комнаты:

public class ClassRoom
{
    public string Teacher;
    public int RoomId;

}

List<ClassRoom> classRooms = new List<ClassRoom>();

classRooms.Add(new ClassRoom() { RoomId = 2000, Teacher = "Mr. Taylor" });
classRooms.Add(new ClassRoom() { RoomId = 2010, Teacher = "Mrs. Lee" });
classRooms.Add(new ClassRoom() { RoomId = 3050, Teacher = "Mrs. McNamara" });
classRooms.Add(new ClassRoom() { RoomId = 4090, Teacher = "Mr. Taylor" });

Затем мне понадобится список идентификаторов комнат для конкретного c учителя.

List<int> RoomIds = new List<int>();

    foreach(ClassRoom classRoom in classRooms)
    {
        if(classRoom.Teacher == "Mr.Taylor")
        {
            RoomIds.Add(classRoom.RoomId);
        }
    }

Я ищу лямбда-выражение или любой другой эффективный и компактный способ получить список идентификаторов комнат. Я всегда получаю список основного класса (ClassRoom).

Я искал что-то вроде этого:

List<int> RoomIds = classRooms.Where(x => x.Teacher == "Mr.Taylor").ToList();

Я знаю, что приведенное выше выражение неверно, так как операция дает мне Список ClassRoom, а не нужных мне номеров RoomIds. Я просто хотел изобразить, что мне нужно.

Это вообще возможно? Я был бы очень признателен за помощь.

1 Ответ

5 голосов
/ 08 мая 2020

Вам не хватает Select:

List<int> RoomIds = classRooms
    .Where(x => x.Teacher == "Mr.Taylor")
    .Select(x => x.RoomId)
    .ToList();

Если два учителя могут иметь одинаковые RoomId и вам нужен уникальный список идентификаторов комнат, вы можете включить .Distinct():

List<int> RoomIds = classRooms
    .Where(x => x.Teacher == "Mr.Taylor")
    .Select(x => x.RoomId)
    .Distinct()
    .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...