如何在列表中删除具有相同字符串但startDate.Time较低的元素?
假设您有一个看起来像这样的列表:
Datetime Date String Name
07.06.2019 10:16:00, Test
07.06.2019 11:16:00, Test
07.06.2019 12:16:00, Test
07.06.2019 13:16:00, Test
07.06.2019 18:16:00, Test1
07.06.2019 19:16:00, Test1
07.06.2019 20:16:00, Test1
07.06.2019 21:16:00, Test1
07.06.2019 22:16:00, Test2
07.06.2019 23:16:00, Test2
鉴于DateTime.Date
是相同的,我只想保留列表中每个字符串具有最新时间戳的DateTime.Date
。
我该如何实现?
我的实现:
List.OrderByDescending(x => x.Datetime).GroupBy(x =>
x.Datetime.Date).Select(x => x.First()).ToList();
但是,这并不认为字符串应该不同,就好像Test和test1具有相同的Datetime.Date
值一样,但是Test字符串具有更高的时间戳,则它将删除Test1元素,而不是希望的。
答案 0 :(得分:1)
您可以通过使用Max来做到这一点;
var result = List.GroupBy(x => x.Name)
.Select(i => new MyList { Name = i.Key, DateTime = i.Max(j => j.DateTime).Date })
.ToList();
答案 1 :(得分:1)
假设具有DateTime和字符串属性的类如下所示:
public class MyClass
{
public string Text { get; set; }
public DateTime Date { get; set; }
}
然后您可以使用的LINQ是这样的:
var newList = List.GroupBy(l => l.Text).Select(g => new MyClass { Text = g.Key, Date = g.Max(i => i.Date)}).ToList();
这将根据您的要求为您提供过滤列表。
答案 2 :(得分:1)
由于您说过要获取每个Name
的每个日期的最新信息,所以我建议:
var ans = list.GroupBy(i => new { i.Date.Date, i.Name }).Select(ig => ig.OrderByDescending(i => i.Date.TimeOfDay).First()).ToList();