Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Binary=null的LINQ到SQL可枚举表达式失败_C#_Sql_Linq To Sql_Null - Fatal编程技术网

C# Binary=null的LINQ到SQL可枚举表达式失败

C# Binary=null的LINQ到SQL可枚举表达式失败,c#,sql,linq-to-sql,null,C#,Sql,Linq To Sql,Null,这是一个奇怪的LINQ到SQL问题,它不能作为可枚举(在SQL中)进行计算,但我可以计算客户端。我认为这与我测试二进制属性为“null”有关 我需要确定作业何时完成,这意味着该作业中的所有文件的binary FileContents属性中至少有一些数据。该过程是查找给定JobId的所有文件,如果其中任何文件的FileContents=null,则作业尚未完成。如果所有文件都有一些文件内容,则作业完成 第一次尝试: bool isJobComplete = !context.Files.Any

这是一个奇怪的LINQ到SQL问题,它不能作为可枚举(在SQL中)进行计算,但我可以计算客户端。我认为这与我测试二进制属性为“null”有关

我需要确定作业何时完成,这意味着该作业中的所有文件的binary FileContents属性中至少有一些数据。该过程是查找给定JobId的所有文件,如果其中任何文件的FileContents=null,则作业尚未完成。如果所有文件都有一些文件内容,则作业完成

第一次尝试:

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);
List 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]
选择
那么1
其他0
结束>作为[value1]
有人对此有经验吗,或者有人解释为什么LINQ不能对SQL使用null吗

编辑:


在[FileContents]为空的[File]中运行SELECT TOP 1*也会超时。这是SQL无法搜索二进制类型字段的问题吗?如果是这样的话,是否有一个SQL命令可以用于此场景?我们如何操作LINQ to SQL来生成这样的命令?

我觉得有人可能有锁。运行查询时,在服务器上运行sp_who2。是否有什么东西阻止了查询?

您是否尝试过在SQL Management Studio中运行L2S生成的查询?你在那里有时间吗?好主意,答案是肯定的。事实上,从[File]中选择TOP 1*,其中[FileContents]为空也会给出超时。由于本地化问题,在OP请求时关闭。是的,锁或数据库由于某种原因性能不佳。查询间歇性地工作,我无法从DBA获得任何合理的解释。没有我最初怀疑的那么有趣!