使用LINQ';DataTable上的s.Any()

本文关键字:Any 上的 DataTable LINQ 使用 | 更新日期: 2023-09-27 18:29:08

我有一个加载了一些记录的数据表,然后我从另一个文件中提取一个查询,并想检查我在该查询中提取的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。它不断地返回错误,我是不是错过了什么?有更好的方法吗?

使用LINQ';DataTable上的s.Any()

我使用的是.Any()函数,如果数据表的第一个字段中有一个ID与记录集合中的ID匹配,则它将返回true。连续返回false

当使用==时,它比较对象引用。我建议您改用Equals,它将比较值。因此,将您的声明更改为

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

这将达到你的期望。

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

如果找到ANY元素,将返回true。您发布的代码指定您要做的下一件事是询问

if (!hasit)
{
    //Logic
}

这意味着如果(没有)。。。这产生了不正确的行为。更改为:

if (hasit)
{
    //Logic
}

你就会得到想要的结果。

编辑:为邝乐的观察喝彩。

我会尝试将其分解,看看是否能找到错误:

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
}