LINQ仅通过id搜索对象子属性集合

本文关键字:对象 属性 集合 搜索 id LINQ | 更新日期: 2023-09-27 18:06:39

我再次遇到一些Linq问题,我试图限制回来的信息,但仍然有层次结构形式的对象(基于其来自的xml和在UI中需要做的事情),基本格式是:

  1. 单人间
    • [房间收集]
      • 1号房间(ID = 1)
      • 2号房间(ID = 2)
  2. 双人房
    • [房间收集]
      • 3号房间(ID = 3)
      • 4号房间(ID = 4)

但是我想要的是基于房间id(1,2,3,4等)返回房间类型和特定的房间层次结构,即(如果id 4传入)。

  1. 双人房
    • 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当包含期待一个对象,所以我不确定这里最好的方法是什么,我卡住了。

请帮忙就太好了。

Rob

LINQ仅通过id搜索对象子属性集合

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的房间类型(这就是WhereAny调用的作用)。