【问题标题】:LINQ searching an object sub property collection by just the idLINQ 仅通过 id 搜索对象子属性集合
【发布时间】:2011-08-27 03:49:08
【问题描述】:

我又遇到了一些 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 它没有)并且正在寻找我完全理解这一点。

在下面的代码中,项目来自另一个方法,该方法基本上在上面的示例层次结构中输出:

            var item = items.Select(i =>                
            new RoomType
            {
                name = i.name,
                rooms = i.rooms
                    .Where(r => r.Name == id.ToString())
            }).FirstOrDefault();

我需要做的是只返回在其房间集合中有一个房间的房间类型,该房间具有我传递给我的方法的正确 ID,我不确定上面的代码是否是一个开始,我试着搞砸与 Contains 等有关,但是当 Contains 期望一个对象时,我正在搜索一个 id,所以我不确定这里最好的方法是什么,我被卡住了。

任何帮助都会很棒。

罗伯

【问题讨论】:

    标签: c# linq linq-to-sql


    【解决方案1】:
    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 的房间的房间类型(这就是带有 Any 调用的 Where 所做的)。

    【讨论】:

    • 非常感谢乔治,我已经接近这一点,但这已经为我清除了,我试图编辑你的答案,因为 Any Lambada 中的 = 必须是 == 但它不会让我
    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 2011-12-30
    • 1970-01-01
    • 2012-09-30
    • 2015-05-01
    • 2011-08-21
    • 2021-12-29
    • 2019-09-14
    相关资源
    最近更新 更多