c# - 从对象列表,如何获取特定对象参数值的列表基于另一个参数值
问题描述
不确定我做错了什么。我一直在网上寻找如何使用 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。我只是想描绘我所追求的。
这甚至可能吗?我非常感谢您的帮助。
解决方案
你错过了一个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();
推荐阅读
- routing - Typo3 9 - 路由 - 新闻列表中的 cHash
- javascript - 如何阻止导航栏干扰模式关闭按钮的功能?
- android - 无法解析符号 AppCompatActivity
- c++ - 当我尝试删除指针时我的程序崩溃了
- c++ - 从本机 C++ 结构构建时是否可以优化 flatbuffers 序列化?
- php - 为什么我的 crontab 不在服务器中运行我的电报机器人 php 代码?
- excel - 在宏中查找excel表的最后一行和最后一列
- json - MongoDB查询过滤对象数组和格式返回对象
- r - 如何在 R 中修复大型数据框
- reactjs - 向 Redux 存储添加嵌套数组项时未定义 this.props.onPress(row)