您好我收到了错误
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
}
答案 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
声明的条件。
答案 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.
}
}
这将使您有机会获得进一步任务的临时值。通过这种方式,您可以一次性获得价值并执行多项任务。