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

时间:2011-08-26 11:08:55

标签: c# linq linq-to-sql

我在某些Linq中遇到了一些问题,我试图限制回来的信息,但仍然以层次结构形式存在对象(基于xml来自UI以及需要做什么)基本格式是:

  1. 单人间
    • [客房收藏]
      • 房间1(ID = 1)
      • 2室(ID = 2)
  2. 双床间
    • [客房收藏]
      • 3号房间(ID = 3)
      • 第4室(ID = 4)
  3. 但我想要的是基于房间id(1,2,3,4等)返回房间类型和特定房间层次,即(如果id 4被传入)。

    1. 双床间
      • 第4室(ID = 4)
    2. 我创建了一些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,所以我不确定这里最好的方法是什么,而且我被卡住了。

      任何帮助都会很棒。

      罗布

1 个答案:

答案 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电话的房间类型。