我在某些Linq中遇到了一些问题,我试图限制回来的信息,但仍然以层次结构形式存在对象(基于xml来自UI以及需要做什么)基本格式是:
但我想要的是基于房间id(1,2,3,4等)返回房间类型和特定房间层次,即(如果id 4被传入)。
我创建了一些LINQ,我认为它正在工作,但我错了,因为它只返回第一个房间类型(单人间),只有一个房间,如果if匹配(我发送id 3和4它没有)和看我完全理解这一点。
在下面的代码中,项目来自另一种方法,它基本上在上面的例子中输出:
var item = items.Select(i =>
new RoomType
{
name = i.name,
rooms = i.rooms
.Where(r => r.Name == id.ToString())
}).FirstOrDefault();
我需要做的是只返回在其房间集合中有房间的房间类型,该房间集合具有我传递给我的方法的正确ID,我不确定上面的代码是否是一个开始,我试着弄乱使用Contains等,但是当Contains期待一个物体时,我正在寻找一个id,所以我不确定这里最好的方法是什么,而且我被卡住了。
任何帮助都会很棒。
罗布
答案 0 :(得分:2)
var 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
电话的房间类型。