2011-12-28 41 views
9

我需要檢查兩個日期在Linq查詢中是否相等,日期來自兩個不同的表(不作爲參數)。我已經查看了網絡上的現有解決方案以及SO。有些不適用於我的情況,有些不夠優雅。只是尋找更好的替代解決方案,如果有的話。優雅的解決方案,檢查兩個日期是否相等,在Linq(其中第二個日期不是一個參數)

示例查詢(需要比較僅日期的部分):

var query = from t1 in Table1 
      join t2 in Table2 on t1.Id equals t2.ForeignKeyId 
      where t1.Id = someId 
       && t1.Date1.Date.Equals(t2.Date2.Date) 

這一個失敗並顯示錯誤「‘日期’在LINQ到Entitiies不支持只有初始化器,實體成員和實體導航屬性。支持「

該職位'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported有一個分別比較日,月和年的解決方案。我試圖把它包裝到一個擴展方法中,但似乎Linq不喜歡擴展方法。由於第二個日期不是一個變量,我不能使用鏈接帖子中提到的其他解決方案(因爲某些原因,我不能在Linq內的某個日期調用「AddDays」方法)。看起來Linq中的Date API有很多限制。

+0

比較日,月,年分別按預期工作嗎? – dasblinkenlight 2011-12-28 12:24:57

+0

是的,如果我將它們分開進行比較,它會起作用。 – RKP 2011-12-28 12:43:39

回答

16

嘗試使用EntityFunctions類中的DiffDays。 個人從來沒有使用過這個,但值得去嘗試這樣的:

var query = from t1 in Table1 
     join t2 in Table2 on t1.Id equals t2.ForeignKeyId 
     where t1.Id = someId 
      && EntityFunctions.DiffDays(t1.Date1, t2.Date2) == 0 
+1

非常感謝。這就像一個魅力。我查看了生成的SQL,並將日期比較轉換爲DATEDIFF(day,t1.Date1,t2.Date2)= 0,這是正確的。我以前不知道這個「EntityFunctions」。再次感謝。 – RKP 2011-12-28 12:57:03

+0

歡迎您,很高興幫助:) – Reniuz 2011-12-28 13:03:02

+0

忘了提及我使用了您的代碼的稍微修改版本。我不能像我的帖子中提到的那樣使用「Datetime」的「Date」屬性,所以我使用了「EntityFunctions.DiffDays(t1.Date1,t2.Date2)== 0」,它工作。 – RKP 2011-12-28 14:23:11

0

據我記憶,你可以比較日期使用== operator

+0

'=='比較日期和時間部分; OP只希望比較日期。 – dasblinkenlight 2011-12-28 12:23:12

相關問題