LINQ仅通过id搜索对象子属性集合
本文关键字:对象 属性 集合 搜索 id LINQ | 更新日期: 2023-09-27 18:06:39
我再次遇到一些Linq问题,我试图限制回来的信息,但仍然有层次结构形式的对象(基于其来自的xml和在UI中需要做的事情),基本格式是:
- 单人间
- [房间收集]
- 1号房间(ID = 1)
- 2号房间(ID = 2)
- 双人房
- [房间收集]
- 3号房间(ID = 3)
- 4号房间(ID = 4)
但是我想要的是基于房间id(1,2,3,4等)返回房间类型和特定的房间层次结构,即(如果id 4传入)。
- 双人房
- 4号房间(ID = 4)
我创建了一些我认为是工作的LINQ,但我错了,因为它只是返回第一个房间类型(单人房间),只有一个房间,如果if匹配(我发送id 3和4它不),看着它,我完全理解。
在下面的代码中,items来自另一个方法,它基本上输出在上面的示例层次结构中:
var item = items.Select(i =>
new RoomType
{
name = i.name,
rooms = i.rooms
.Where(r => r.Name == id.ToString())
}).FirstOrDefault();
我需要做的是只返回房间类型,在它的房间集合中有一个房间,它有我传递到我的方法的正确id,我不确定上面的代码是否是一个开始,我试着乱弄包含等,但我正在寻找一个id当包含期待一个对象,所以我不确定这里最好的方法是什么,我卡住了。
请帮忙就太好了。
Robvar item = items.Where(i => i.rooms.Any(r => r.Name == id.ToString())
.Select(i =>
new RoomType
{
name = i.name,
rooms = i.rooms
.Where(r => r.Name == id.ToString())
}).SingleOrDefault();
您应该过滤掉不包含特定id的房间类型(这就是Where
与Any
调用的作用)。