2017-04-05 72 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

>=>