LINQ怎么根据“某个字段”去除重复数据查询(急求答案)

LINQ怎么根据“某个字段”去除重复数据查询(急求答案),第1张

Distinct方法的第二重载可以

Enumerable.Distinct<TSource> (IEnumerable<TSource>, IEqualityComparer<TSource>),

例如数据类为

class School

{

public int Id { getset}

public string Name { getset}

//是否重点学校

public bool IsKeySchool { getset}

}

实现IEqualityComparer<School>的比较器类为

class SchoolComparer : EqualityComparer<School>

{

public override bool Equals(School x, School y)

{

return x.IsKeySchool==y.IsKeySchool

}

public override int GetHashCode(School obj)

{

return obj.IsKeySchool.GetHashCode()

}

}

原始列表为

var schoolList = new List<School>{

new School{Id=1, Name="三中",IsKeySchool=true},

new School{Id=2, Name="五中",IsKeySchool=true},

new School{Id=3, Name="十中",IsKeySchool=false},

new School{Id=4, Name="十五中",IsKeySchool=true},

new School{Id=5, Name="二十中",IsKeySchool=false},

}

执行

var tempList = schoolList.Distinct(new SchoolComparer())

结果就只有两条“三中”和“十中”

public class d

{

public int a, b, x, y

}

public class myEqual : IEqualityComparer<d>

{

public myEqual() {

}

public bool Equals(d x, d y)

{

if (x == null || y == null) return false

return x.x == y.x &&x.y == y.y

}

public int GetHashCode(d obj)

{

return obj.GetHashCode()

}

}

static void Main(string[] args)

{

List<d>list = new List<d>()

d g = new d()

g.a=1g.b=2g.x=11g.y=12

list.Add(g)

d j=new d()

j.a = 3j.b = 4j.x = 11j.y = 12

list.Add(g)

var a = list.Distinct(new myEqual())

Console.ReadKey()

}

照我这样就行了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9541564.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存