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ではなく を返しますboolboolのように返すものが必要です

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

ifステートメントの条件として。

関連項目
Enumerable.Any メソッド (IEnumerable)

于 2013-06-13T18:59:40.040 に答える
2

より洞察力を高めるために、if ステートメントには true または false に評価される式が必要です。Where() メソッドの上にマウスを置くと、System.Linq.IQueryable である戻り値を確認できます。

あなたのエラーメッセージはブール値(true、false)が必要だと言っていますが、System.Linq.IQueryableを受け取っています

Where() を Any() に置き換えると、ブール値が返されます。

于 2013-06-13T19:02:40.493 に答える
1

ロバートが上記のケースでAny()を使用するという彼の回答で示唆したように。これは、true または false を比較するだけの場合に適しています。私の意見では、ファイル オブジェクトと比較しているオブジェクトを探している可能性があります。

したがって、このように試すこともできます。

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.     
  }
}

これにより、以降のタスクの一時値を取得する機会が得られます。これにより、1 回の試行で値を取得し、複数のタスクも実行できます。

于 2013-06-13T19:17:22.780 に答える