2017-04-05 102 views
0

我已经创建了一个从数据库收集未处理文件的SQL语句。它使用DicomDataType_LK表将结果限制为我感兴趣的结果。当我运行它时,我得到两个结果。将TSQL查询翻译成LINQ

SELECT * FROM [Procedure].DicomData dicoms 
JOIN [Procedure].DicomDataType_LK dtype 
    ON dicoms.DicomDataTypeID = dtype.DicomDataTypeID 
WHERE dicoms.ProcedureID = '00000000-0000-0000-0000-000000000000' 
    AND dicoms.CreateDate > '3/27/2017' 
    AND (dtype.DicomDataType LIKE 'V Density' 
     OR dtype.DicomDataType LIKE 'Q Density' 
     OR dtype.DicomDataType LIKE 'i Density' 
     OR dtype.DicomDataType LIKE 'u Density') 

我已经将此语言翻译成了LINQ to SQL,但是使用相同的连接,我得到零结果。

  IQueryable<DicomData> rows = from dicoms in db.DicomDatas 
       join dtype in db.DicomDataType_LKs 
        on dicoms.DicomDataTypeID equals dtype.DicomDataTypeID 
       where dicoms.ProcedureID == Guid.Empty 
        && dicoms.CreateDate > fromTime 
        && (dtype.DicomDataType.Equals("V Density") 
        || dtype.DicomDataType.Equals("Q Density") 
        || dtype.DicomDataType.Equals("i Density") 
        || dtype.DicomDataType.Equals("u Density")) 
       select dicoms; 

我已经确认fromTime给出的值应该包含我的两个结果。有人能让我知道我在翻译中做错了什么吗?

+1

不一样'AND dicoms.CreateDate> ='3/27/ 2017'与'&& dicoms.CreateDate> fromTime'不一样。 '> ='与'>'不是一样的...... –

+1

还有其他问题表明'Guid.Empty'与(例如)'new Guid(“00000000-0000-0000-0000 -000000000000“)在LINQ中。看一个例子[这个问题](http://stackoverflow.com/questions/358345/hanging-linq-query-with-guid-empty-in-the-where-expression)。因此,请尝试转换为上面的新Guid语法,并查看它是否有效。我怀疑所有零都是有效的GUID,但空的GUID不是。 –

+0

@SaniSinghHuttunen - 感谢您的纠正。 SQL中的语句仅用于测试LINQ查询是否正确。 CreateDate来自一周前,但正在处理的项目是从今天开始的,所以任何一个都应该可以工作。 – Tim

回答

1

从我所看到的:

AND dicoms.CreateDate >= '3/27/2017' 是不一样的&& dicoms.CreateDate > fromTime

>=>