无法将类型'System.Linq.IQueryable <database.table>'隐式转换为'bool'</database.table>

时间:2013-06-13 18:57:12

标签: c# wpf linq-to-sql

您好我收到了错误

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      
  }

3 个答案:

答案 0 :(得分:14)

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声明的条件。

另见
Enumerable.Any Method (IEnumerable)

答案 1 :(得分:2)

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

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

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

答案 2 :(得分: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.     
  }
}

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