不能隐式转换类型'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
}
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。通过这种方式,您可以在一次尝试中获得值并执行多个任务。