Skip to content

Commit 5d63a00

Browse files
committed
Speed up search some more
1 parent b6d6a2c commit 5d63a00

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

Server/Api/ReplayController.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,7 @@ [FromQuery] string query
8484
searchMode = modeEnum;
8585
}
8686

87-
var replays = _context.Replays
88-
.Include(r => r.RoundEndPlayers);
89-
90-
var found = ReplayParser.SearchReplays(searchMode, query, replays);
87+
var found = ReplayParser.SearchReplays(searchMode, query, _context);
9188
// Order found replays by date
9289
found = found.OrderByDescending(r => r.Date ?? DateTime.MinValue).ToList();
9390

Server/ReplayParser.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -286,26 +286,28 @@ public static Replay ParseReplay(Stream fileStream)
286286
/// <exception cref="NotImplementedException">
287287
/// Thrown when the search mode is not implemented.
288288
/// </exception>
289-
public static List<Replay> SearchReplays(SearchMode mode, string query, IQueryable<Replay> queryable)
289+
public static List<Replay> SearchReplays(SearchMode mode, string query, ReplayDbContext context)
290290
{
291+
var queryable = context.Replays.AsQueryable();
292+
291293
switch (mode)
292294
{
293295
case SearchMode.Map:
294-
return queryable.Where(x => x.Map.Contains(query)).ToList();
296+
return queryable.Where(x => x.Map.ToLower().Contains(query.ToLower())).ToList();
295297
case SearchMode.Gamemode:
296-
return queryable.Where(x => x.Gamemode.Contains(query)).ToList();
298+
return queryable.Where(x => x.Gamemode.ToLower().Contains(query.ToLower())).ToList();
297299
case SearchMode.ServerId:
298-
return queryable.Where(x => x.ServerId.Contains(query)).ToList();
300+
return queryable.Where(x => x.ServerId.ToLower().Contains(query.ToLower())).ToList();
299301
case SearchMode.Guid:
300302
return queryable.Where(x => (x.RoundEndPlayers ?? new List<Player> { }).Any(y => y.PlayerGuid.ToString().Contains(query, StringComparison.CurrentCultureIgnoreCase))).ToList();
301303
case SearchMode.PlayerIcName:
302-
return queryable.Where(x => (x.RoundEndPlayers ?? new List<Player> { }).Any(y => y.PlayerIcName.Contains(query, StringComparison.CurrentCultureIgnoreCase))).ToList();
304+
return queryable.Where(x => (x.RoundEndPlayers ?? new List<Player> { }).Any(y => y.PlayerIcName.ToLower().Contains(query.ToLower()))).ToList();
303305
case SearchMode.PlayerOocName:
304-
return queryable.Where(x => (x.RoundEndPlayers ?? new List<Player> { }).Any(y => y.PlayerOocName.Contains(query, StringComparison.CurrentCultureIgnoreCase))).ToList();
306+
return queryable.Include(replay => replay.RoundEndPlayers).AsEnumerable().Where(x => (x.RoundEndPlayers ?? new List<Player> { }).Any(y => y.PlayerOocName.Contains(query, StringComparison.CurrentCultureIgnoreCase))).ToList();
305307
case SearchMode.RoundEndText:
306-
return queryable.Where(x => x.RoundEndText != null && x.RoundEndText.Contains(query, StringComparison.CurrentCultureIgnoreCase)).ToList();
308+
return queryable.Where(x => x.RoundEndText != null && x.RoundEndText.ToLower().Contains(query.ToLower())).ToList();
307309
case SearchMode.ServerName:
308-
return queryable.Where(x => x.ServerName != null && x.ServerName.Contains(query, StringComparison.CurrentCultureIgnoreCase)).ToList();
310+
return queryable.Where(x => x.ServerName != null && x.ServerName.ToLower().Contains(query.ToLower())).ToList();
309311
default:
310312
throw new NotImplementedException();
311313
}

0 commit comments

Comments
 (0)