使用LINQ在C#中合并两个对象列表

时间:2011-05-11 16:16:23

标签: c# asp.net linq generics

我有两个List<T>个,它们都是同一个类型。是否有一种简单的方法可以合并到两个集合而不会循环,但两个集合并将它们合并为第三个?

代码

var myObject= new List<Core.MyObject>();
var myObject2= new List<Core.MyObject>();

if(!string.IsNullOrEmpty(txb.Text))
{
    var repository = ServiceLocator.Current.GetInstance<Core.RepositoryInterfaces.IRepository>();
    myObject= repository.GetWherePostCodeLike(txb.Text).ToList();
}

if(!string.IsNullOrWhiteSpace(ddl.SelectedValue))
{
    var repository = ServiceLocator.Current.GetInstance<Core.RepositoryInterfaces.IRepository>();
    myObject2= repository.GetNearTownX(ddlLocations.SelectedValue).ToList();
}

能够在第二个上使用+ =会很好,但这是不允许的...任何想法?

3 个答案:

答案 0 :(得分:8)

调用Concat(保留重复项)或Union(跳过重复项)LINQ方法

IEnumerable<MyObject> third = list.Concat(otherList);

要使用Union,您需要覆盖EqualsGetHashCode以按值比较对象。 (或通过IEqualityComparer<MyObject>

答案 1 :(得分:3)

你有几种选择。

你可以连接它们:

var combined = dataSet.Concat(dataSet2).ToList();

您可以将其中一个添加到另一个:

dataSet.AddRange(dataSet2);

答案 2 :(得分:1)

您可以执行以下操作:

var merged = dataSet.Concat(dataSet2).ToList();