NET[C#]LINQ中如何按实体的某个属性去重后返回不重复的集合?
问题描述
比如有如下实体集合:
Person1: Id=1, Name="Test1"
Person2: Id=1, Name="Test1"
Person3: Id=2, Name="Test2"
如何使用LINQ按 Person.Id 去重,返回的集合只包含 Person1 和 Person3 ?
方案一
创建一个静态扩展类:
public static IEnumerable<TSource> DistinctBy<TSource, TKey>
(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
调用方法:
var query = people.DistinctBy(p => p.Id);
如果需要按多个属性去重,则可以使用匿名对象,如:
var query = people.DistinctBy(p => new { p.Id, p.Name });
方案二
List<Person> distinctPeople = allPeople
.GroupBy(p => p.PersonId)
.Select(g => g.First())
.ToList();
多属性去重:
List<Person> distinctPeople = allPeople
.GroupBy(p => new {p.PersonId, p.FavoriteColor} )
.Select(g => g.First())
.ToList();
方案三
var uniquePeople = from p in people
group p by new {p.ID} //or group by new {p.ID, p.Name, p.Whatever}
into mygroup
select mygroup.FirstOrDefault();
方案四
Persons.ToLookup(p => p.Id).Select(coll => coll.First());
方案五
var result = people.Where(p => !people.Any(q => (p != q && p.Id == q.Id)));
1.你好?是因為你,身邊的人好。—— by潇沫明月 -dont't repeat yourself 2.下辈子 无论 爱与不爱 我们 都不会 再见 3.有所见略同的对手 有对酒当歌的友人 有真心相对的红颜 有识千里马的伯乐 有一颗炽烈真诚的心 所以----- 要知道你最想做的 i will not repeat myself
潇沫明月 关注 - 92 粉丝 - 0
+加关注
1
0
« 上一篇:asp.net-mvc验证码 asp.net-mvc c#验证码 » 下一篇:安装powerdesigner 16.5
posted @ 2018-08-08 19:23 潇沫明月 阅读(1891) 评论(0) 编辑 收藏
返回顶部
注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。
【推荐】超50万C++/C#源码: 大型实时仿真组态图形源码 【活动】看雪2019安全开发者峰会,共话安全领域焦点 【培训】Java程序员年薪40W,他1年走了别人5年的路
相关博文:
· 根据某个对象属性,获取对象集合中所有不重复的值(去重)
· Java List实体类去重
· Linq 中的distinct去重
· Linq Enumerable.Distinct方法去重
· 来说下实体类去重的问题
最新新闻:
· 福布斯2019全球上市公司2000强:中国企业占据前十半壁江山
· 周鸿祎:没有人文思考设计出来的系统可能就是个悲剧
· 直击|阿里王坚:城市大脑的作用是算力时代的电网
· 生命与地质的交织
· Nature社论:读博有害健康,三分之一博士生心理有问题
» 更多新闻...
昵称:潇沫明月
园龄:8年5个月
粉丝:0
关注:92
+加关注
|
日 |
一 |
二 |
三 |
四 |
五 |
六 |
28 |
29 |
30 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
搜索
常用链接
随笔档案
最新评论
阅读排行榜
评论排行榜
推荐排行榜
Copyright ©2019 潇沫明月
|
请发表评论