需求:
/// 对同一个类型的两个序列(或叫集合,数组) users,users1进行比较,
/// users1中的元素如果users中没有,就把这些元素与users的元素组合.
解决方案:

Code
using System;
using System.Collections.Generic;
using System.Linq;


namespace XMLSpy.Linq
{

/**//// <summary>
/// 对同一个类型的两个序列(或叫集合,数组) users,users1进行比较,
/// users1中的元素如果users中没有,就把这些元素与users的元素组合.
/// Author : xmlspy.spring@gmail.com
/// </summary>

public class SetCompare
{

public SetCompare()
{
List<User> users = new List<User>()

{
new User(0),
new User(3),
new User(1),
new User(8)
};

List<User> users1 = new List<User>()

{
new User(0),
new User(1),
new User(3),
new User(5)
};

Console.WriteLine("------------方式1---------------");
//方式1:使用扩展方法,必须实现IEqualityComparer<T>接口
//users1中的元素如果users中没有,就把这些元素与users的元素组合.
List<User> users2 = users.Union(users1, new UserEqualityComparer()).ToList();


foreach (User u in users2)
{
Console.WriteLine(u.Id);
}


/**////// 重新初始化

users = new List<User>()
{
new User(0),new User(3),
new User(1),new User(8)
};


users1 = new List<User>()
{
new User(0),new User(1),
new User(3),new User(5)
};


Console.WriteLine("------------方式2---------------");
//方式2:使用Linq语句,不用实现IEqualityComparer<T>接口

//步骤1:查找出users1中有而users中没有的User序列
var users3 = from user1 in users1
let tem = from user in users select user.Id
where tem.Contains(user1.Id) == false
select user1;
//步骤2:添加步骤1的结果到users中
users.AddRange(users3);


foreach (User u in users)
{
Console.WriteLine(u.Id);
}
}
}


public class UserEqualityComparer : IEqualityComparer<User>
{

public bool Equals(User x, User y)
{
return x.Id == y.Id;
}


public int GetHashCode(User obj)
{
return obj.Id;
}
}


public class User
{
private int _id;
private string _name;


Constructors#region Constructors

public User(int id)
{
_id = id;
}
#endregion


Properties#region Properties

public int Id
{

get
{ return _id; }

set
{ _id = value; }
}

public string Name
{

get
{ return _name; }

set
{ _name = value; }
}
#endregion
}
}