kissyje
[C#]LINQ中如何按实体的某个属性去重
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
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社论:读博有害健康,三分之一博士生心理有问题
» 更多新闻...
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
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 |
搜索
常用链接
随笔档案
最新评论
- 1. Re:asp.net-mvc验证码 asp.net-mvc c#验证码
- 你知道那个File方法是什么吗?急求啊!
- --Mr灬Empty
阅读排行榜
- 1. [C#]LINQ中如何按实体的某个属性去重(1891)
- 2. asp.net-mvc验证码 asp.net-mvc c#验证码(150)
- 3. 安装powerdesigner 16.5(87)
- 4. 清空指定的文件夹,但不删除文件夹(28)
- 5. github的SSH配置如下(27)
评论排行榜
推荐排行榜
Copyright ©2019 潇沫明月