2009-09-02 33 views
-1

これはEnumerable(SQL)として評価できない奇妙なLINQ-to-SQL問題ですが、クライアント側を評価できます。私はそれが私のテストバイナリプロパティに 'null'として関連していると思います。LINQ-to-SQL Binary = nullの列挙型式が失敗します。

ジョブが完了した時点を判断する必要があります。つまり、そのジョブ内のすべてのファイルには、少なくともバイナリのFileContentsプロパティのデータが含まれています。この手順では、特定のJobIdのすべてのファイルを検索し、それらのファイルのいずれかにFileContents = nullがある場合、ジョブはまだ完了していません。すべてのファイルに一部のFileContentsがある場合、ジョブは完了です。

最初の試み:

bool isJobComplete = !context.Files.Any 
    (f => f.JobId == this.JobId && f.FileContents == null); 

は動作しません!私はSQLタイムアウト例外を受け取ります。私は同じことについて他のバリエーションを試してみましたが、同じ結果を受け取りました。

var filesInJob = context.Files.Where(f => f.JobId == this.JobId); 
bool isJobComplete = !filesInJob.Any(jf => jf.FileContents == null); 

解決方法は、すべてのファイルの一覧を取得してから、クライアント側のFileContentsを確認することです。これは理想的なものではありません。時には私は仕事の中に大きなファイルをたくさん持っていることがあります。

List<File> filesInJob = context.Files.Where(f => f.JobId == this.JobId).ToList(); 
bool isJobComplete = !filesInJob.Any(jf => jf.FileContents == null); 

非稼働式に生成されたSQL:

SELECT 
    <CASE 
     WHEN EXISTS< 
      SELECT NULL AS [EMPTY] 
      FROM [dbo].[File] as [t0] 
      WHERE <[t0].[JobId] = @p)> AND <[t0].[FileContents] IS NULL> 
      > THEN 1 
     ELSE 0 
    END> AS [value1] 

は、誰もがこれを任意の経験、またはLINQは、SQLにnullを話すことができない理由の説明を持っていますか?

EDIT:

は[たFileContents]もNULL ISタイムアウトを与える[ファイル]から選択しますTOP 1 *を実行しています。これは、SQLがバイナリ型フィールドを検索できない問題ですか?もしそうなら、このシナリオで動作するSQLコマンドがありますか?そのようなコマンドを生成するためにLINQ-to-SQLをどのように操作できますか?

+0

SQL Management StudioでL2Sで生成されたクエリを実行しようとしましたか?タイムアウトがありますか? –

+0

いい考えです。答えは「はい」です。実際、SELECT TOP 1 * FROM [File] WHERE [FileContents] IS NULLもまたタイムアウトを与えます。 –

+0

ローカライズされた問題により、OPの要請により閉鎖されます。 – Kev

答えて

0

誰かがロックしているように私に匂いがする。クエリが実行されている間、サーバー上でsp_who2を実行します。クエリをブロックするものはありますか?

+0

はい、何らかの理由でロックやデータベースのパフォーマンスが低下しています。この問合せは断続的に機能し、DBAから合理的な説明を得ることができません。私が最初に疑ったほど面白くない! –