不能隐式转换类型'System.Linq.IQueryable'& #

本文关键字:Database Table IQueryable Linq 类型 不能 System 转换 | 更新日期: 2023-09-27 18:18:22

你好,我得到错误

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      
  }

不能隐式转换类型'System.Linq.IQueryable<Database.Table>'& #

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

返回IQueryable,而不是bool。你需要返回一个bool,比如

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

作为if语句的条件。

参见
可列举的。Any Method (IEnumerable)

为了更深刻地理解,if语句需要一个计算结果为真或假的表达式。如果你把鼠标放在Where()方法上,你可以看到它将返回什么,这是一个System.Linq.IQueryable。

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

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

正如Robert在他的回答中建议的那样,在上述情况下使用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.     
  }
}

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