2014-02-17 107 views
4

我要查詢的結果比較日期邏輯Linq中

public resultType GetData(int ClientID, DateTime CreatedDate) 
{ 
    var Row = DB.tblPlans 
       .Where(m => m.fkClient_Id == ClientID && m.PlanDate <= CreatedDate) 
       .OrderByDescending(m => m.Id) 
       .FirstOrDefault(); 
} 

但是,根據實際需要「m.PlanDate」在查詢中也比較結果的時候不來。 所以在上面的函數參數「CreatedDate」總是會得到「12:00:00 AM」連接到它假設「2014年2月17日12:00:00 AM」 ,因爲它是一個日期選擇器控制,我轉換它進入日期時間,但創建日期的值與我必須比較它具有原始時間假設「2/17/2014 11:58:35 AM」

這就是爲什麼我沒有得到所需的結果。

我認爲如果時間部分被移除,結果將會很好。

我已經搜索了上述問題,它使用AddDays有許多解決方案,如:: (1);但我不確定它的工作。 也我試過了:: http://www.codeproject.com/Articles/499987/LINQ-query-to-compare-only-date-part-of-DateTime

請建議我一個更好的方式來做到這一點,因爲這不是我第一次得到這個問題。

+0

的'AddDays'方法是最好的方法,因爲當你比較它SQL Server無法使用索引了之前轉換數據庫值。你是什​​麼也不確定? –

回答

7

如果您正在使用LINQ to SQL(如你在問題標籤中指定),然後簡單地獲取日期時間的日期部分:

var Row = DB.tblPlans 
      .Where(m => m.fkClient_Id == ClientID && m.PlanDate.Date <= CreatedDate) 
      .OrderByDescending(m => m.Id) 
      .FirstOrDefault(); 

實體框架,你應該使用EntityFunctions.TruncateTime(m.PlanDate)

1

您已經嘗試了這個:

public resultType GetData(int ClientID, DateTime CreatedDate) 
{ 
    var Row = DB.tblPlans 
       .Where(m => m.fkClient_Id == ClientID && m.PlanDate.Date <= CreatedDate) 
       .OrderByDescending(m => m.Id) 
       .FirstOrDefault(); 
} 
1

的推薦方式比較LINQ查詢日期,如果您使用的EntityFramework 6 DbFunctions.TruncateTime(m.PlanDate)和以前的版本EntityFunctions.TruncateTime(m.PlanDate)