【发布时间】:2019-02-19 15:17:24
【问题描述】:
我有一个 DataTable,我想删除与 List< string> 匹配的所有行,该怎么做?以下是我的代码,
public static DataTable GetSkills(List<Skill> EnteredSkills)
{
DataTable dt = new DataTable();
dt = GetDBMaster("SkillMaster");
List<string> MatchingSkills = EnteredSkills.Select(c => c.Text).ToList();
//Logic to Delete rows MatchingSkills from dt here
return dt;
}
最终解决方案
public static DataTable GetSkills(List<Skill> EnteredSkills)
{
DataTable dt = new DataTable();
dt = GetDBMaster("SkillMaster");
var MatchingSkills = new HashSet<string>(EnteredSkills.Select(c => c.Text));
List<DataRow> removeRows = dt.AsEnumerable().Where(r => MatchingSkills.Contains(r.Field<string>("DataTableSkillColumnName"))).ToList();
removeRows.ForEach(dt.Rows.Remove);
return dt;
}
【问题讨论】:
-
你不能简单地循环检查匹配的行并将其从数据表中删除吗?
-
是的,但是有没有更好的方法来做到这一点,在我整个项目中有很多这样的情况。
-
方法
GetDBMaster()内部发生了什么,为什么不在填充数据表的查询中包含MatchingSkills作为条件? -
GetDBMaster 从静态数据表变量中提供技能大师,当第一个用户向我的页面发出请求时,该变量仅从数据库加载一次。所以它有完整的主人,我试图在这里过滤来自那个主人的行。