public MPageResult <MMod> GetModList(MModPageParam param, string currentUserID) { StringBuilder where = new StringBuilder() .WhereIf(true, $" AND [Tag] = @{nameof(param.Tag)} ") .WhereIf(!string.IsNullOrWhiteSpace(param.Keywords), $" AND Title LIKE @{nameof(param.FuzzyKeywords)} "); var starModIDs = new List <int>(); if (!string.IsNullOrWhiteSpace(currentUserID)) { string sql = $@" SELECT ModID FROM ModStar WHERE platformID = {currentUserID} "; starModIDs = Db.Query <int>(sql).ToList(); if (param.OnlyStar) { string starModIDsStr = string.Join(',', starModIDs); where.Append($" AND [ID] IN ({starModIDsStr}) "); } } GridReader reader = Db.QueryMultiple($@"SELECT COUNT(ID) FROM Mod WHERE 1 = 1 {where} SELECT * FROM(SELECT ROW_NUMBER() OVER(ORDER BY id) AS RowNum, * FROM Mod WHERE 1 = 1 {where} ) AS result WHERE RowNum > {(param.PageNo - 1) * param.PageSize} AND RowNum <= {param.PageNo * param.PageSize} ORDER BY ID DESC", param); var result = new MPageResult <MMod> { Total = reader.ReadFirst <int>(), List = reader.Read <MMod>() }; var modIDs = result.List.Select(x => x.ID); var starCountList = Db.Query <(int, int)>($@" SELECT ModID, COUNT(ModID) FROM ModStar WHERE ModID IN @{nameof(modIDs)} GROUP BY ModID" , new { modIDs }); foreach (var item in result.List) { var(modID, starCount) = starCountList.FirstOrDefault(x => x.Item1 == item.ID); if (modID != 0) { item.StarCount = starCount; } if (!string.IsNullOrWhiteSpace(currentUserID)) { if (starModIDs.Any(x => x == item.ID)) { item.Star = true; } } } return(result); }
public MPageResult <MMod> GetModList(MModPageParam param) { MPageResult <MMod> result = new MPageResult <MMod>(); BeginDb(DAL => { string currentUserID = CurrentUser?.PlatformID ?? string.Empty; result = DAL.GetModList(param, currentUserID); foreach (MMod item in result.List) { item.ImgUrl = "https://cdn-img.speedrunners.cn/" + item.ImgUrl; } }); return(result); }