对linq查询结果进行去重处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对linq查询结果进行去重处理相关的知识,希望对你有一定的参考价值。

将数据全部查询出的语句如下
var query=from e in dc.a
order by e.b

select e;
pst=query.ToList();
现在我想做的是在查询时将数据表里面将字段x与y都相同的记录去重,请问下该怎么做?
例如查询结果中存在这样的两条记录:
a=1 b=2 x=11 y=12

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

我只需要其中的一条便可(具体哪条无所谓)

参考技术A 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=1; g.b=2; g.x=11; g.y=12;
list.Add(g);
d j=new d();
j.a = 3; j.b = 4; j.x = 11; j.y = 12;
list.Add(g);
var a = list.Distinct(new myEqual());

Console.ReadKey();

照我这样就行了来自:求助得到的回答本回答被提问者采纳
参考技术A 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=1; g.b=2; g.x=11; g.y=12;
list.Add(g);
d j=new d();
j.a = 3; j.b = 4; j.x = 11; j.y = 12;
list.Add(g);
var a = list.Distinct(new myEqual());

Console.ReadKey();重写e类的Equals和GetHashCode,然后用Distinct
pst=query.Distinct().ToList();
也可以用for循环一个一个比较
参考技术B 重写e类的Equals和GetHashCode,然后用Distinct
pst=query.Distinct().ToList();
也可以用for循环一个一个比较追问

可以再详细点吗?我对linq还不是很熟悉(我想通过SQL语句来实现,因为程序中已经有了很多的循环了)

以上是关于对linq查询结果进行去重处理的主要内容,如果未能解决你的问题,请参考以下文章

Solr的查询结果去重

记录一些细节

如何通过两种不同类型的字段对 linq 查询结果进行排序 [重复]

laravel 中将一对多关联查询的结果去重处理

使用linq进行查询,结果为空时,是怎么判断的呢?

LINQ查询表达式 - LINQ 查询分组