您的位置:首页 > 其它

IList.Distinct() 根据字段过滤重复的数据

2012-04-01 10:00 363 查看
根据网上的例子修改的,记录一下。 IList.Distinct(new Comparint("ID","Name"));

1 /// <summary>
2 /// 根据字段过滤重复的数据
3 /// </summary>
4 /// <typeparam name="T"></typeparam>
5 public class Comparint<T> : IEqualityComparer<T> where T : class, new()
6 {
7 private string[] comparintFiledName = { };
8
9 public Comparint() { }
10 public Comparint(params string[] comparintFiledName)
11 {
12 this.comparintFiledName = comparintFiledName;
13 }
14
15 bool IEqualityComparer<T>.Equals(T x, T y)
16 {
17 if (x == null && y == null)
18 {
19 return false;
20 }
21 if (comparintFiledName.Length == 0)
22 {
23 return x.Equals(y);
24 }
25 bool result = true;
26 var typeX = x.GetType();//获取类型
27 var typeY = y.GetType();
28 foreach (var filedName in comparintFiledName)
29 {
30 var xPropertyInfo = (from p in typeX.GetProperties() where p.Name.Equals(filedName) select p).FirstOrDefault();
31 var yPropertyInfo = (from p in typeY.GetProperties() where p.Name.Equals(filedName) select p).FirstOrDefault();
32
33 result = result
34 && xPropertyInfo != null && yPropertyInfo != null
35 && xPropertyInfo.GetValue(x, null).ToString().Equals(yPropertyInfo.GetValue(y, null));
36 }
37 return result;
38 }
39 int IEqualityComparer<T>.GetHashCode(T obj)
40 {
41 return obj.ToString().GetHashCode();
42 }
43 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: