From e3ecbe31065c124d561dd126992b8e45ad54fccd Mon Sep 17 00:00:00 2001 From: Rex Lorenzo Date: Wed, 13 May 2026 00:24:32 -0700 Subject: [PATCH 1/2] refactor: convert foreach-add patterns to LINQ Select --- web/Areas/CTS/Controllers/CourseController.cs | 38 ++++++++----------- .../Models/IndividualSearchResult.cs | 10 +++-- 2 files changed, 21 insertions(+), 27 deletions(-) diff --git a/web/Areas/CTS/Controllers/CourseController.cs b/web/Areas/CTS/Controllers/CourseController.cs index f2a755c02..766e7573d 100644 --- a/web/Areas/CTS/Controllers/CourseController.cs +++ b/web/Areas/CTS/Controllers/CourseController.cs @@ -224,18 +224,14 @@ public async Task>> AddSessionCompetency return checkResult; } - foreach (var levelId in sessionComp.LevelIds) - { - var newSessionComp = new SessionCompetency() - { - CompetencyId = sessionComp.CompetencyId, - SessionId = sessionComp.SessionId, - LevelId = levelId, - RoleId = sessionComp.RoleId, - Order = sessionComp.Order ?? 0 - }; - context.Add(newSessionComp); - } + context.AddRange(sessionComp.LevelIds.Select(levelId => new SessionCompetency() + { + CompetencyId = sessionComp.CompetencyId, + SessionId = sessionComp.SessionId, + LevelId = levelId, + RoleId = sessionComp.RoleId, + Order = sessionComp.Order ?? 0 + })); await context.SaveChangesAsync(); var sessionComps = await context.SessionCompetencies @@ -270,18 +266,14 @@ public async Task>> UpdateSessionCompete { context.Remove(r); } - foreach (var l in toAdd) + context.AddRange(toAdd.Select(l => new SessionCompetency() { - var newSessionComp = new SessionCompetency() - { - CompetencyId = sessionComp.CompetencyId, - SessionId = sessionComp.SessionId, - LevelId = l, - RoleId = sessionComp.RoleId, - Order = sessionComp.Order ?? 0 - }; - context.Add(newSessionComp); - } + CompetencyId = sessionComp.CompetencyId, + SessionId = sessionComp.SessionId, + LevelId = l, + RoleId = sessionComp.RoleId, + Order = sessionComp.Order ?? 0 + })); await context.SaveChangesAsync(); await trans.CommitAsync(); } diff --git a/web/Areas/Directory/Models/IndividualSearchResult.cs b/web/Areas/Directory/Models/IndividualSearchResult.cs index 1c1265718..0a258080b 100644 --- a/web/Areas/Directory/Models/IndividualSearchResult.cs +++ b/web/Areas/Directory/Models/IndividualSearchResult.cs @@ -126,11 +126,13 @@ public void LookupEmailHost(Classes.SQLContext.AAUDContext context) // Sanitize MailId to prevent SQL injection in OPENQUERY (which doesn't support parameters) var safeMailId = MailId.Replace("'", "''"); var query = $"SELECT * FROM OPENQUERY(UCDMothra,'SELECT (USERPART || ''@'' || HOSTPART) AS USERATHOST FROM MOTHRA.MAILIDS WHERE MAILID = ''{safeMailId}'' AND MAILSTATUS = ''A'' AND MAILTYPE = ''P''')"; - var results = context.Database.SqlQueryRaw(query).ToList(); - foreach (var r in results) + var hosts = context.Database.SqlQueryRaw(query) + .ToList() + .Select(r => r.Split("@")[^1]) + .ToList(); + if (hosts.Count > 0) { - var parts = r.Split("@"); - EmailHost = parts[^1]; + EmailHost = hosts[^1]; } } } From 768fba1ba699f01c8759cfcd43d369b999e02e82 Mon Sep 17 00:00:00 2001 From: Rex Lorenzo Date: Wed, 13 May 2026 02:14:36 -0700 Subject: [PATCH 2/2] chore(resharper): drop useless ToList() before LINQ-to-objects Select MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit S2971: SqlQueryRaw().ToList().Select(...) materializes the entire result set into a List just to throw it away. Replace with AsEnumerable() — same effect of switching to LINQ-to-objects so the Split isn't translated to SQL, without the extra allocation. --- web/Areas/Directory/Models/IndividualSearchResult.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/Areas/Directory/Models/IndividualSearchResult.cs b/web/Areas/Directory/Models/IndividualSearchResult.cs index 0a258080b..29e5830a5 100644 --- a/web/Areas/Directory/Models/IndividualSearchResult.cs +++ b/web/Areas/Directory/Models/IndividualSearchResult.cs @@ -127,7 +127,7 @@ public void LookupEmailHost(Classes.SQLContext.AAUDContext context) var safeMailId = MailId.Replace("'", "''"); var query = $"SELECT * FROM OPENQUERY(UCDMothra,'SELECT (USERPART || ''@'' || HOSTPART) AS USERATHOST FROM MOTHRA.MAILIDS WHERE MAILID = ''{safeMailId}'' AND MAILSTATUS = ''A'' AND MAILTYPE = ''P''')"; var hosts = context.Database.SqlQueryRaw(query) - .ToList() + .AsEnumerable() .Select(r => r.Split("@")[^1]) .ToList(); if (hosts.Count > 0)