From eff5ac478fa0ea06dab84b62ddecdb0cb69014d3 Mon Sep 17 00:00:00 2001 From: asesidaa <1061472754@qq.com> Date: Thu, 8 Sep 2022 18:28:46 +0800 Subject: [PATCH] Try change to a custom distinct logic for recent songs --- .../Controllers/Game/UserDataController.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/TaikoLocalServer/Controllers/Game/UserDataController.cs b/TaikoLocalServer/Controllers/Game/UserDataController.cs index 1f8c1ad..d9ba116 100644 --- a/TaikoLocalServer/Controllers/Game/UserDataController.cs +++ b/TaikoLocalServer/Controllers/Game/UserDataController.cs @@ -46,12 +46,23 @@ public class UserDataController : BaseController var recentSongs = context.SongPlayData .Where(datum => datum.Baid == request.Baid) .AsEnumerable() - .DistinctBy(datum => datum.SongId) .OrderByDescending(datum => datum.PlayTime) .ThenByDescending(datum => datum.SongNumber) .Select(datum => datum.SongId) - .Take(10) .ToArray(); + + // Use custom implementation as distictby cannot guarantee preserved element + var recentSet = new SortedSet(); + foreach (var id in recentSongs) + { + recentSet.Add(id); + if (recentSet.Count == 10) + { + break; + } + } + + recentSongs = recentSet.ToArray(); var userData = new UserDatum(); if (context.UserData.Any(datum => datum.Baid == request.Baid))