首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的linq查询没有像预期的那样工作,我哪里做错了?

我的linq查询没有像预期的那样工作,我哪里做错了?
EN

Stack Overflow用户
提问于 2019-06-27 21:31:45
回答 1查看 78关注 0票数 0

我有一个在读取txt文件后创建的数据表,一旦我有了这个数据表,我需要删除基于1列和值列表returnClass()的行,但是经过一些测试,我发现我的LINQ删除了比预期更多的行……所以我不确定我在下面的代码中做错了什么。

起初,我认为一切都很好,因为我正在处理大量记录,并且每次通过都会减少记录数量,但现在我正在使用一个小文件进行调试,我发现它删除的内容比它应该删除的要多。

下面是我的LINQ查询:

代码语言:javascript
复制
// 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");

这是我的清单:(简写为一个简单的问题)

代码语言:javascript
复制
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。

如何根据精确匹配进行删除?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-27 21:39:03

我认为问题在于,您实际上是在查看returnClass()列表中是否有任何值包含在column7中找到的值。在您的Any函数中,您正在使用String.Contains,我猜您希望这是一个List.Contains或类似的东西。

请尝试执行此操作(未测试):

代码语言:javascript
复制
// 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");
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56792207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档