我認爲最好的辦法是到後期處理,以維護排序:
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