读书人

Listlt;Tgt;去重有关问题

发布时间: 2013-02-15 15:46:56 作者: rapoo

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

读书人网 >asp.net

热点推荐