无需迭代即可将对象集合添加到另一个对象集合

时间:2012-02-29 01:34:27

标签: c# .net linq entity-framework

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

任何人都可以告诉我,如果没有迭代可以吗?如果是,请向我解释过程

5 个答案:

答案 0 :(得分:15)

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

objcol1 = objcol1.Concat(objcol2)

我确信它实际上是在某个地方进行迭代,但你不需要编写代码就可以了。

注意:这仅适用于City个对象相同的情况,或者您可以使用Select映射对象。

答案 1 :(得分:9)

您还可以使用列表的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"

答案 2 :(得分:3)

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

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

var concatenated = collection1.Concat(collection2);

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

答案 3 :(得分:1)

实际上,您不需要新的var:

collection1.AddRange(collection2);

答案 4 :(得分:-1)

为此可以使用 List.AddRangeEnumerable.Concat

mainList.AddRange(collection);
mainList = mainList.Concat(collection);

AddRange 修改列表,而 Concat 返回一个新序列而不修改列表。