【问题标题】:Froma list of objects, How to get a list of a specific object parameter value base in another parameter value从对象列表中,如何根据另一个参数值获取特定对象参数值的列表
【发布时间】:2020-05-08 06:59:26
【问题描述】:

不确定我做错了什么。我一直在互联网上寻找如何使用 lambda 有效地获取基于另一个属性的属性值列表。

假设我有一个包含教师姓名和房间 ID 的教室列表:

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" });

然后,我需要一个特定教师的房间 ID 列表。

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

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

我正在使用 lambda 表达式或任何其他有效且紧凑的方式来获取房间 ID 列表。我总是会得到一个主类(ClassRoom)的列表。

我追求的是这样的:

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

我知道上面的表达式是错误的,因为操作给了我一个 ClassRoom 列表,而不是我需要的 RoomIds。我只是想描绘我所追求的。

这可能吗?我非常感谢您的帮助。

【问题讨论】:

标签: c# list linq lambda


【解决方案1】:

您缺少Select

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

如果两位教师有可能拥有相同的 RoomId,并且您想要一个唯一的房间 ID 列表,您可以包括 .Distinct()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    相关资源
    最近更新 更多