开发中经常遇到的几个场景案例的处理方法
开发使用场景一(获取到正确的集合SQL字段):
1: 通常我们需要在后台这样来处理SQL,动态获取id集合 ,这样说大家还不是太明白:
这里举一下小例子 例如:
//伪代码

1 IDbConnection connection = null; 2 StringBuilder sb = new StringBuilder(); 3 var listid = new List<int> { 1, 2, 11, 44, 21, 8, 31, 98 }; 4 sb.Append("select a,b,c,d"); 5 sb.Append("from taba left join tabb on taba.id=tabb.id"); 6 sb.Append(" left join tabc on taba.id=tabc.id"); 7 sb.Append(" where taba.id in (id1,id2,id3) ORDER BY taba.cdate");//里面的id格式, 8 var dynamicobj = Dapper.SqlMapper.Query(connection, sb.ToString());
2:这里给出两种方法来处理,当然数据库中也有分割形成这样的格式或者Sqlserver中形成的一个id table,这里主要是讨论程序上的动态实现
2.1: //方法一:动态拼接生成需要的格式,说白了就是循环遍历
sb.Append(" where taba.id in ("+ listid.GetSqlListIDByArry() + ") ORDER BY taba.cdate");//里面的id格式,
2.2:其扩展方法code为:

1 public static class ExtentionsHelper 2 { 3 public static string GetSqlListIDByArry(this List<int> qidlist) 4 { 5 if (qidlist == null || qidlist.Count <= 0) 6 { 7 throw new Exception("List<string>集合参数数据不可以为空!"); 8 } 9 StringBuilder sbQuestionIDList = new StringBuilder(); 10 qidlist.ToList().ForEach(c => sbQuestionIDList.Append($"'{c}',")); 11 return sbQuestionIDList.ToString().TrimEnd(','); 12 } 13 }
2.:3: //方法二:Join
//里面的id是int等数字类型,这样的处理就ok了,
sb.Append(" where taba.id in (" + string.Join(",", listid) + ") ORDER BY taba.cdate");
//但是如果id是字符串类型,还需要进一步来处理,listid.Select(c => c):为对象时的筛选 这里为int集合可以直接拿来使用
sb.Append(" where taba.id in " + $"('{string.Join("', '", listid)}')" + " ORDER BY taba.cdate ");
B开发使用场景二:
1:通常我们在做企业级的报表开发是,通常需要使用的并列排序,啥,并列排序?是啥鬼???宝宝有很多问号是吧?下面举一个案例就会茅塞顿开
2:需求简单描述:班级排名:所选课程的每个考试名称所录入的所有学生的成绩进行降序排名,由1排起,以此获得当前帐号成绩的排名;
(注意:若有不同学生的总分相同时,则排名并列相同,且下一分值的学生排名需要根据排名相同的人数进行顺延,
例如第1名1位同学,第2名并列3位同学,则下一分值的学生排名是第5名)“等级”类型不需要显示班级排名;
3:通常这样的处理我们都是直接使用数据库来实现,可以参考个人之前写的笔记 https://www.cnblogs.com/Fengge518/p/13564742.html

1 SELECT 2 S.id,S.score, 3 (CASE WHEN 4 @sameScore=S.score THEN @myrow WHEN @sameScore:=S.score THEN @myrow:=@myrow+1 END) AS myrow 5 FROM 6 (SELECT id,score 7 FROM studentscore 8 ORDER BY score DESC) S,( 9 SELECT @myrow:=0,@sameScore:= NULL)r ;
3.1:在数据库的做法如下:
但是个人觉得啥都要数据库来实现计算的话,
效率较低,数据库的压力也较大,尤其是数据量大,单机数据库的情况下就会更加的明显,如果我们是而先把拿到的数据放到内存中再来
进一步处理自然会效率高很多,也减轻了数据库的压力。
3.2:自定义简单的方法来实现

1 #region 简单的算法 2 List<decimal> scoreList = new List<decimal> { 88, 90, 60, 75, 46, 90, 60, 60 }; 3 var newlist = scoreList.OrderByDescending(c => c).Distinct().ToList(); 4 var dic = new Dictionary<decimal, int>(); 5 var orderRangeDic = new Dictionary<decimal, int>(); 6 for (int d = 0; d < newlist.Count; d++) 7 { 8 int scoreCount = scoreList.Where(c => c == newlist[d]).Count(); orderRangeDic.Add(newlist[d], scoreCount); dic.Add(newlist[d], (d + 1)); 9 } 10 while (true) 11 { 12 try 13 { 14 Console.WriteLine("请在【88, 90, 60, 75, 46, 90, 60, 60】数据中选择其中一个数字并输出:"); 15 int score = int.Parse(Console.ReadLine()); int scoreOrder = dic[score];//当前分数的排名 16 int scoreRange = 0;//默认为零比较合适 17 if (score == newlist.Max()) 18 { 19 scoreRange = 1;//直接第一名 20 } 21 else if (score == newlist.Min()) 22 { 23 scoreRange = scoreList.Count;//直接最后一名 24 } 25 else 26 { 27 int totalScoreRange = 0; 28 for (int a = 0; a < newlist.Count; a++) 29 { 30 decimal nowScore = newlist[a];//目前的分数 31 if (nowScore != score) 32 totalScoreRange += orderRangeDic[nowScore]; 33 else 34 totalScoreRange += 1; break; 35 } 36 scoreRange = totalScoreRange; 37 } 38 Console.WriteLine($"{score}的排名是{scoreRange}"); 39 } 40 catch (Exception ex) 41 { 42 Console.WriteLine($"错误,请重新输入!"); 43 } 44 System.Threading.Thread.Sleep(90); 45 } 46 #endregion
4:在core控制台上测试的效果
5:先看测试效果截图(分左右测两个报表的数据,这里一起返回了),postman本地查询325ms出结果还是不错的,
6:emmm 我举手,怀疑你根本就没有使用这些方法,那我就截图拿出证据
好了,到此结束,下次我们再见,继续努力!!!
好了今天就先到这里,下次有时间再更新,如果存在不合理的地方,欢迎大家多多指教留言!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具