我的linq查询无法正常工作,我在做什么错?

时间:2019-06-27 13:31:44

标签: c# list linq datatable

我有一个数据表,我是在读取txt文件后创建的,一旦有了该数据表,就需要删除基于1列和值列表List returnClass()的行,但是经过一些测试,我发现LINQ正在删除超出预期范围的内容...所以不确定下面的代码在做什么。

起初,我认为一切都很好,因为我正在处理大量记录,并且每次传递的次数都在下降,但是现在我正在处理一个小的文件进行调试,我发现它删除了更多比应该的。

这是我的LINQ查询:

private List<string> returnClass()
{
    List<string> cl = new List<string>();
    cl.Add("7");
    cl.Add("72");
    return cl;
}

这是我的清单:(请简化一下,以使其成为一个简单的问题)

while(a = getchar()!= '\n')

我的数据表有100行,column7中有数字,键入字符串,我需要找到列表中具有确切数字的每一行,因此,如果它找到7,我不想要它,如果找到了72我不想要它。但如果有75、17或127,则需要留下。上面的查询正在删除那些,因为它包含数字7。

如何根据完全匹配将其删除?

1 个答案:

答案 0 :(得分:3)

我认为问题在于,您实际上是在查看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");