如何遍历字符串数组并将数据库查询结果正确填充到DataTable中
问题核心是循环中每次都对dt变量重新赋值,旧的查询结果会被直接覆盖,最终只保留最后一次ID对应的查询数据,可通过合并每次查询的DataTable结果修复:
string[] moodleIDs = this.moodleID.Split(','); ScheduleToMoodleTemplate s = new ScheduleToMoodleTemplate(); DataTable dt = null; foreach(var id in moodleIDs) { DataTable tempDt = s.ScheduleToMoodleTemplateSelectByID(id); if (dt == null) { // 首次查询直接作为初始总表 dt = tempDt; } else { // 后续查询结果合并到总表,要求每次返回的表结构完全一致 dt.Merge(tempDt); } } gvEdit.DataSource = dt; gvEdit.DataBind();
补充注意事项
- 确保
ScheduleToMoodleTemplateSelectByID方法每次返回的DataTable的列名、列类型完全一致,否则合并时会出现列重复或者类型不匹配报错 - 如果需要对结果去重,可在合并完成后调用
dt.DefaultView.ToTable(true, 列名1, 列名2...)方法实现去重 - 如果业务允许,优先将查询方法改造成支持传入多个ID批量查询,减少数据库请求次数,性能会远优于循环单次查询
内容的提问来源于stack exchange,提问作者KiterCodes
相关产品推荐
相关产品推荐

