3

我有一个加载了一些记录的数据表,然后我从另一个文件中提取查询,并想检查我在此查询中提取的 ID 是否存在于我的数据表中。

foreach (var item in records)
{
    bool hasit = dt.AsEnumerable().Any(p => p.Field<string>(0) == item.ID);
    if (!hasit)
    {
        //Logic
    }
}

我正在使用该 .Any() 函数,如果数据表的第一个字段中存在与记录集合中的 id 匹配的 ID,则期望它返回 true。它不断地返回错误,我错过了什么吗?有一个更好的方法吗?

4

3 回答 3

2

.Any()如果数据表的第一个字段中存在与记录集合中的 id 匹配的 ID,我正在使用该函数并期望它返回 true。它不断返回false

当一个人使用==它时,它会比较对象引用。我建议您改用Equals它来比较值。因此将您的陈述更改为

dt.AsEnumerable().Any(p => p.Field<string>(0).Equals(item.ID))

这将实现您的期望。

于 2020-08-02T10:43:43.973 回答
1

方法 .Any(p => p.Field(0) == item.ID)

如果找到任何元素,将返回 true。您发布的代码指定您接下来要做的就是询问

if (!hasit)
{
    //Logic
}

这意味着 if(NOT any has it)... 这会产生不正确的行为。将其更改为:

if (hasit)
{
    //Logic
}

你会得到想要的结果。

编辑:感谢 Cuong Le 的观察。

于 2013-08-27T16:13:06.000 回答
0

我会尝试分解它以查看是否可以找到错误:

foreach (var item in records)
{
    var enumer = dt.AsEnumerable(); // <-- Check this to make sure it has elements
    var filtered = enumer.Any(p => p.Field<string>(0) == item.ID); // <- Check to make sure it has elements

}
于 2013-08-27T16:26:19.140 回答