我有一个在读取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。
如何根据精确匹配进行删除?
发布于 2019-06-27 21:39:03
我认为问题在于,您实际上是在查看returnClass()列表中是否有任何值包含在column7中找到的值。在您的Any函数中,您正在使用String.Contains,我猜您希望这是一个List.Contains或类似的东西。
请尝试执行此操作(未测试):
// REMOVES ALL RECORDS WITH A CLASS THAT IS NON-LABEL CLASS
var query = from r in d.AsEnumerable()
where !returnClass().Contains(r.Field<string>("Column7"))
select r;
DataTable output = query.CopyToDataTable<DataRow>();
int dtoutputCount = output.Rows.Count;
ToCSV(output, ftype, "filteredclass");https://stackoverflow.com/questions/56792207
复制相似问题