将TSQL查询翻译成LINQ
问题描述:
我已经创建了一个从数据库收集未处理文件的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给出的值应该包含我的两个结果。有人能让我知道我在翻译中做错了什么吗?
答
从我所看到的:
AND dicoms.CreateDate >= '3/27/2017'
是不一样的&& dicoms.CreateDate > fromTime
即>=
与>
不一样'AND dicoms.CreateDate> ='3/27/ 2017'与'&& dicoms.CreateDate> fromTime'不一样。 '> ='与'>'不是一样的...... –
还有其他问题表明'Guid.Empty'与(例如)'new Guid(“00000000-0000-0000-0000 -000000000000“)在LINQ中。看一个例子[这个问题](http://*.com/questions/358345/hanging-linq-query-with-guid-empty-in-the-where-expression)。因此,请尝试转换为上面的新Guid语法,并查看它是否有效。我怀疑所有零都是有效的GUID,但空的GUID不是。 –
@SaniSinghHuttunen - 感谢您的纠正。 SQL中的语句仅用于测试LINQ查询是否正确。 CreateDate来自一周前,但正在处理的项目是从今天开始的,所以任何一个都应该可以工作。 – Tim