【发布时间】:2022-07-11 17:54:37
【问题描述】:
假设我有以下收藏
public class User
{
public string SSN { get; set; }
public DateTime StartDate { get; set; }
}
var users = new List<User>
{
new User { SSN = "ab", StartDate = new DateTime(2021, 01, 01) },
new User { SSN = "ab", StartDate = new DateTime(2021, 01, 02) }, // take this
new User { SSN = "ac", StartDate = new DateTime(2021, 01, 01) },
new User { SSN = "ac", StartDate = new DateTime(2021, 02, 01) }, // take this
new User { SSN = "ad", StartDate = new DateTime(2020, 01, 01) },
new User { SSN = "ad", StartDate = new DateTime(2021, 01, 01) },
new User { SSN = "ad", StartDate = new DateTime(2022, 01, 01) }, // take this
};
我想要做的是让 SSN 与众不同,但仅在最新的 StartDate 之前,我创建了两个似乎有效的查询。在性能方面有更好的方法吗?
var district = users
.OrderByDescending(p => p.StartDate)
.GroupBy(g => g.SSN)
.Select(x => x.First())
.ToList();
var ssn = users
.OrderByDescending(p => p.StartDate)
.GroupBy(g => g.SSN)
.Select(x => x.First())
.Select(x=> x.SSN)
.ToList();
【问题讨论】:
-
您要返回带有
StartDate的结果吗?如果不需要返回StartDate,为什么不只是Distinct()这个名字。 -
出于某种原因,我还需要包含 StartDate