簡體   English   中英

比較Linq中的日期邏輯

[英]Comparing the dates logic in 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”,假設“2/17/2014 12:00:00 AM”,因為它是一個datepicker控件,我將其轉換為datetime但是我必須比較的創建日期的值是原始時間假設“2/17/2014 11:58:35 AM”

這就是為什么我沒有得到理想的結果。

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

我搜索了上面的問題,它有很多解決方案,比如:: using AddDays(1); 但我不確定它是否有效。 我也試過:: http://www.codeproject.com/Articles/499987/LINQ-query-to-compare-only-date-part-of-DateTime

請建議我更好的方法,因為這不是我第一次遇到這個問題。

如果您正在使用Linq to SQL(如您在問題標簽中指定的那樣),那么只需獲取DateTime的Date部分:

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

使用Entity Framework,您應該使用EntityFunctions.TruncateTime(m.PlanDate)

你試過這個:

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();
}

如果使用EntityFramework 6,則在linq查詢中比較日期的推薦方法是DbFunctions.TruncateTime(m.PlanDate)和先前版本的EntityFunctions.TruncateTime(m.PlanDate)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM