【发布时间】:2019-11-09 13:04:24
【问题描述】:
我有一个我在读取 txt 文件后创建的数据表,一旦我有了那个数据表,我需要根据 1 列和一个值列表删除行列表 returnClass(),但经过一些测试,我发现我的LINQ 删除的内容超出了预期......所以不确定我在下面的代码中做错了什么。
起初我认为一切都很好,因为我正在处理大量记录并且每次通过时数字都在下降,但现在我使用一个小文件进行调试,我发现它删除了更多比它应该的..
这是我的 LINQ 查询:
// REMOVES ALL RECORDS WITH A CLASS THAT IS NON-LABEL CLASS
var query = from r in d.AsEnumerable()
where !returnClass().Any(r.Field<string>("Column7").Contains)
select r;
DataTable output = query.CopyToDataTable<DataRow>();
int dtoutputCount = output.Rows.Count;
ToCSV(output, ftype, "filteredclass");
这是我的清单:(缩短以使这个问题变得简单)
private List<string> returnClass()
{
List<string> cl = new List<string>();
cl.Add("7");
cl.Add("72");
return cl;
}
我的数据表有 100 行,column7 中有数字,输入字符串,我需要在我的列表中找到具有确切数字的每一行,所以如果它找到一个 7,我不想要它,如果它找到一个72 我不想要它。但是,如果有 75、17 或 127,则需要留下。上面的查询正在删除那些,因为它包含数字 7。
如何根据完全匹配删除?
【问题讨论】:
-
使用
Equals代替Contains? -
一个有用的信息可能是包括您的示例输入、预期输出和实际输出。
-
使用
Contains代替Any? -
如果您在
List<string> cl = new List<string>();上设置断点,该行多久执行一次?一次,还是多次?我担心它可能会针对d中的每一行执行。