gpt4 book ai didi

c# - 有序区别

转载 作者:行者123 更新时间:2023-11-30 17:09:50 24 4
gpt4 key购买 nike

我有以下内容

IList<Project> projects = (from update in dbContext.TicketUpdates
where update.TicketUpdatesEmployeeID == Profile.EmployeeID
orderby update.TicketUpdatesEndDate descending
select update.Ticket.Project).Distinct().ToList();

我知道 Distinct() 不能保证顺序,但之后我无法重新排序,因为投影丢失了我用来排序的字段。我该如何解决这个问题?

最佳答案

我认为最好的办法是发布流程以保留顺序:

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);

通过在 uu.Ticket.Project 中使用 GroupBy,每个更新都将按其相关项目分组。如果您有 10 个项目和 30 个更新分布在它们之间,那么您将在该阶段的输出中有 10 个组(每个项目一个)。接下来,我们按最新的结束日期对组进行排序,这会保留您要查找的降序。最后,我们从项目的每个 IGrouping 中选择键。

关于c# - 有序区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12480010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com