我认为最好的办法是到后期处理,以维护排序:
var projects = (from update in dbContext.TicketUpdates
where update.TicketUpdatesEmployeeID == Profile.EmployeeID
orderby update.TicketUpdatesEndDate descending
select update.Ticket.Project);
var seen = new HashSet<Project>();
foreach (var project in projects)
{
if (seen.Add(project))
{
// A distinct project
}
}
,或者你可以滥用GroupBy
:
var projects = dbContext.TicketUpdates
.Where(uu => uu.TicketUpdatesEmployeeID == Profile.EmployeeID)
.GroupBy(uu => uu.Ticket.Project)
.OrderByDescending(gg => gg.Max(uu => uu.TicketUpdatesEndDate))
.Select(gg => gg.Key);
通过使用GroupBy
跨越uu.Ticket.Project
每次更新都会通过它们的相关项目进行分组。如果您有10个项目和30个更新,他们将在该阶段的输出中有10个组 - 每个项目一个组。接下来,我们按照他们最新的结束日期排序,这些日期保留了您要查找的降序。最后,我们从每个IGrouping
这个项目中选择密钥。
我用'GroupBy'因为我发现它更合理。你还会介意解释'GroupBy'是如何工作的吗?我现在从搜索中了解它,但是当我问这个问题时,我并不知道这些功能,而且我认为这将有助于未来的观众理解。 – ricksmt