首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

List<T>去重有关问题

2013-02-15 
ListT去重问题!写的去重类/// summary/// 去重/// /summarypublic class DistinctExpert : IEqualit

List<T>去重问题!
写的去重类
/// <summary>
    /// 去重
    /// </summary>
    public class DistinctExpert : IEqualityComparer<ExpertsModel>
    {
        public bool Equals(ExpertsModel x, ExpertsModel y)
        {
            return x.id.Equals(y.id);
        }

        public int GetHashCode(ExpertsModel obj)
        {
            return obj.id.GetHashCode();
        }
    }

调用代码:
allSearchExperts.Distinct(new DistinctExpert()).ToList<ExpertsModel>();

结果根本不管用。。。

咋回事啊?

另外网上找的的另两种方法也不好使。。

var ids = rl.GroupBy(m => m.sm.em.tyid).Select(m => new
                {
                    tyid = m.FirstOrDefault().sm.em.tyid
                });
                rl = rl.Where(m => ids.Select(mo => mo.tyid).Contains(m.sm.em.tyid)).ToList();

               var q = (from e in rl
                         select e)
                       .Distinct();
                rl = q.ToList();


list equals
[解决办法]

/// <summary>
     /// 去重
     /// </summary>
     public class DistinctExpert : IEqualityComparer<ExpertsModel>
     {
         public bool Equals(ExpertsModel x, ExpertsModel y)
         {
             return (x.id == y.id);
         }
 
        public int GetHashCode(ExpertsModel obj)
         {
             return obj.id.GetHashCode();
         }
     }
 


参考:
http://blog.csdn.net/q107770540/article/details/5784646

http://msdn.microsoft.com/en-us/library/bb338049.aspx
------解决方案--------------------


private class MyCompare : IEqualityComparer<KeyValuePair<enumMemberGrade, string>>
        {

            bool IEqualityComparer<KeyValuePair<enumMemberGrade, string>>.Equals(KeyValuePair<enumMemberGrade, string> x, KeyValuePair<enumMemberGrade, string> y)
            {
                return x.Key.Equals(y.Key) && x.Value.Equals(y.Value);
            }

            int IEqualityComparer<KeyValuePair<enumMemberGrade, string>>.GetHashCode(KeyValuePair<enumMemberGrade, string> obj)
            {
                return obj.Key.GetHashCode();
            }
        }

实现IEqualityComparer<T>接口 或者 在T 的定义类中重写 Equals 方法

[解决办法]
调用代码:
 var result=allSearchExperts.Distinct(new DistinctExpert()).ToList();
 
[解决办法]
var list=allSearchExperts.Distinct(new DistinctExpert()).ToList<ExpertsModel>();
[解决办法]
自定义比较器
参考http://blog.csdn.net/chinajiyong/article/details/8161944

热点排行
Bad Request.