需求:
/// 对同一个类型的两个序列(或叫集合,数组) users,users1进行比较,
/// users1中的元素如果users中没有,就把这些元素与users的元素组合.
解决方案:
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
}
}
浙公网安备 33010602011771号