使用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。它不断地返回错误,我是不是错过了什么?有更好的方法吗?
我使用的是
.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
}