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