3

您好,我收到错误消息

Cannot implicitly convert type 'System.Linq.IQueryable<Database.Table>' to 'bool'

从这段代码

foreach (var file in files)
{
  if (context.SomeTables.Where(p => p.FileName == System.IO.Path.GetFileName(file)))
  {
      //Do Something     //above I am trying to compare if the filename in the db table
                         //is equal to the GetFileName being passed in but it throwing
                         //the error      
  }
4

3 回答 3

15
context.SomeTables.Where(p => p.FileName == System.IO.Path.GetFileName(file))

返回一个IQueryable,而不是一个bool。您需要返回 a 的东西bool,例如

context.SomeTables.Any(p => p.FileName == System.IO.Path.GetFileName(file)) 

作为if陈述的条件。

另请参见
Enumerable.Any 方法 (IEnumerable)

于 2013-06-13T18:59:40.040 回答
2

为了更有洞察力,if 语句需要一个计算结果为真或假的表达式。如果将鼠标悬停在 Where() 方法上,您可以看到它将返回的内容,即 System.Linq.IQueryable。

您的错误消息是说它需要一个 bool (true, false) 但它正在接收 System.Linq.IQueryable

用 Any() 替换 Where() 将返回一个布尔值。

于 2013-06-13T19:02:40.493 回答
1

正如罗伯特在上述情况下使用Any()的回答中所建议的那样。如果您只是想比较真假,这很好。在我看来,您可能正在寻找与文件对象进行比较的对象。

所以你也可以这样尝试。

foreach (var file in files)
{
 var tempvalue = context.SomeTables.Where(p => p.FileName == System.IO.Path.GetFileName(file)).FirstOrDefault();
  if (tempvalue !=null)
  {
      //here you get both of the object file as well as compairer value.     
  }
}

这将使您有机会获得进一步任务的临时值。通过这种方式,您可以在一次尝试中获得价值并执行多项任务。

于 2013-06-13T19:17:22.780 回答