【求助】请教一个linq 条件去重复的方法!

Sinmo815 2018-10-09 05:02:24
一个List<T> 里面有 name,datetime 2个字段。想请教,我如何使用where() 拿到相同name,datetime最大值的那一条记录并且返回一个list;
列如:张三,2018.10.09
李四,2018.10.09
张三,2018.10.08

结果:张三,2018.10.09
李四,2018.10.09

...全文
191 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
E次奥 2018-10-10
  • 打赏
  • 举报
回复
引用 4 楼 u011205268 的回复:
[quote=引用 3 楼 porenasckx 的回复:]

List<C> list = new List<C>();
            list.Add(new C("张三", DateTime.Parse("2018.10.09")));
            list.Add(new C("李四", DateTime.Parse("2018.10.09")));
            list.Add(new C("张三", DateTime.Parse("2018.10.08")));
            list.Add(new C("李四", DateTime.Parse("2018.10.10")));
            list.Add(new C("李四", DateTime.Parse("2018.10.11")));

            var resultList = list.GroupBy(a => a.Name).Select(c
                => new C
                {
                    Name = c.Key,
                    Time = c.Max(d => d.Time)
                });
请问下,如果还要增加字段又该怎么赋值呢?[/quote] 比如说?增加什么字段?
Sinmo815 2018-10-09
  • 打赏
  • 举报
回复
引用 3 楼 porenasckx 的回复:

List<C> list = new List<C>();
            list.Add(new C("张三", DateTime.Parse("2018.10.09")));
            list.Add(new C("李四", DateTime.Parse("2018.10.09")));
            list.Add(new C("张三", DateTime.Parse("2018.10.08")));
            list.Add(new C("李四", DateTime.Parse("2018.10.10")));
            list.Add(new C("李四", DateTime.Parse("2018.10.11")));

            var resultList = list.GroupBy(a => a.Name).Select(c
                => new C
                {
                    Name = c.Key,
                    Time = c.Max(d => d.Time)
                });
请问下,如果还要增加字段又该怎么赋值呢?
E次奥 2018-10-09
  • 打赏
  • 举报
回复

List<C> list = new List<C>();
            list.Add(new C("张三", DateTime.Parse("2018.10.09")));
            list.Add(new C("李四", DateTime.Parse("2018.10.09")));
            list.Add(new C("张三", DateTime.Parse("2018.10.08")));
            list.Add(new C("李四", DateTime.Parse("2018.10.10")));
            list.Add(new C("李四", DateTime.Parse("2018.10.11")));

            var resultList = list.GroupBy(a => a.Name).Select(c
                => new C
                {
                    Name = c.Key,
                    Time = c.Max(d => d.Time)
                });
xuzuning 2018-10-09
  • 打赏
  • 举报
回复
要 Distinct 而不是 Where,因为 Where 不能完成记录间的比较
比如
            var a = new[] {
new {name="张三", date="2018.10.09"},
new {name="李四", date="2018.10.09"},
new {name="张三", date="2018.10.08"},
};
foreach (var x in a.Distinct(d => d.name))
{
Console.WriteLine(x);
}
这里用到了 Distinct 的一个重载(网上可以找到)
jhdxhj 2018-10-09
  • 打赏
  • 举报
回复
先分组,再去掉重复,百度一下linq分组去重复

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧