在DataTable上使用LINQ的.Any()

时间:2013-08-27 16:04:43

标签: c# linq datatable

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

3 个答案:

答案 0 :(得分:1)

方法     .Any(p =&gt; p.Field(0)== item.ID)

如果找到任何元素,

将返回true。您发布的代码指定您接下来要做的事情是

if (!hasit)
{
    //Logic
}

这意味着如果(没有任何拥有它)......产生了错误的行为。将其更改为:

if (hasit)
{
    //Logic
}

您将获得所需的结果。

编辑:感谢Cuong Le for the observation.

答案 1 :(得分:0)

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

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

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

将达到您的期望。

答案 2 :(得分:-1)

我会尝试分解它,看看能否找到错误:

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

}