【问题标题】:Add Object Collection to another Object Collection without iterating [duplicate]将对象集合添加到另一个对象集合而不进行迭代[重复]
【发布时间】:2012-02-29 01:34:27
【问题描述】:

我有一个对象集合 objcol1(一个州的城市集合示例)和另一个对象集合 objcol2(一个国家的城市示例集合)。现在我正在查询 objcol1,我想将它添加到 objcol2。我可以通过遍历 objcol1 并一一添加到 objcol2 来做到这一点,但我可以直接将 objcol1 添加到 objcol2 objcol2.add(objcol1);

谁能告诉我不迭代是否可行?如果是,请解释一下流程

【问题讨论】:

    标签: c# .net linq entity-framework


    【解决方案1】:

    您可以使用Enumerable.Concat 扩展方法:

    objcol1 = objcol1.Concat(objcol2)
    

    我确信它实际上在某个地方进行了迭代,但您无需编写代码即可。

    注意:这仅在您的 City 对象相同时才有效,或者您可以使用 Select 映射对象。

    【讨论】:

    • 可能是因为你没有使用objcol1 = objcol1.Concat(objcol2);
    • @M.Babcock 是的,就我所见+1而言,你的答案是正确的
    • 如果objcol1 被getter 访问并且没有setter,你会怎么做?
    • @sydd - 你不能直接使用IEnumerable,因为它或多或少是不可变的。使用List<T> 或类似名称可能会更好。
    【解决方案2】:

    您也可以使用列表中的AddRange。请参阅documentation 了解更多信息。

    var a = new List<string> { "1", "2" };
    var b = new List<string> { "3", "4" };
    a.AddRange(b);
    
    // a would contain "1", "2", "3" and "4"
    

    【讨论】:

      【解决方案3】:

      是的,这取决于您的用例。如果您不关心“集合”类型是什么,则可以使用 linq Concat 命令创建一个新的可枚举对象,在迭代时将包含两个集合中的项目。

      var collection1 = new List<int> { 1, 2, 3 };
      var collection2 = new [] { 4, 5, 6};
      
      var concatenated = collection1.Concat(collection2);
      

      另一方面,如果您需要将项目实际插入到现有集合中,则需要进行迭代。

      【讨论】:

        【解决方案4】:

        其实你不需要新的 var:

        collection1.AddRange(collection2);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-05-11
          • 2019-10-01
          • 1970-01-01
          • 2019-01-18
          • 1970-01-01
          • 2022-07-05
          • 2014-12-09
          相关资源
          最近更新 更多