我有一个数据表加载了一些记录,然后我从另一个文件中提取查询,并想检查我在此数据表中存在的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。它不断返回虚假,我错过了什么吗?有一个更好的方法吗?
答案 0 :(得分:1)
方法 .Any(p =&gt; p.Field(0)== item.ID)
如果找到任何元素,将返回true。您发布的代码指定您接下来要做的事情是
if (!hasit)
{
//Logic
}
这意味着如果(没有任何拥有它)......产生了错误的行为。将其更改为:
if (hasit)
{
//Logic
}
您将获得所需的结果。
答案 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
}