簡體   English   中英

比較 linq 中的日期

[英]Comparing dates in linq

我想在數據庫中查詢日期大於或等於給定日期的項目。

數據庫中的日期是日期時間並記錄時間。

如果用戶輸入搜索字符串“1/30/2014”,他們希望返回在該日期的任何時間發生的條目。 但是,不會返回時間在上午 12 點之后的任何內容。

我知道我可以簡單地在搜索字符串中添加一天,但有沒有更合適的方法?

if (form["closedend"] != "")
{
     DateTime d = DateTime.Parse(form["closedend"]);
     traces = traces.Where(s => s.date_Closed >= d);
}

您可以使用Date屬性截斷時間部分:

 traces = traces.Where(s => s.date_Closed.Date <= d.Date);

通過這種方式你可以包括這一天,因為DateTime都是午夜。

如果您使用LINQ to Entities 更新 DateTime.Date不受支持,您可以使用此解決方案: 在LINQ to Entities中使用DateTime

.Where(s => EntityFunctions.TruncateTime(s.date_Closed) <=  EntityFunctions.TruncateTime(d))

你說

日期大於或等於給定日期

但是在你編寫的代碼中

s.date_Closed <= d

我認為你必須改變<= by >=來獲得大於或等於d的日期,現在你得到的日期小於或等於d。

對於此示例,您不需要任何其他dll 你可以實現其他函數,返回bool ,fe:

public bool MyFunction(DateTime s)
{
   DateTime d = DateTime.Parse(Your constructor);
   return (s.date_Closed >= d);
}

var query = from obj in traces
            where MyFunction(obj.date_Closed.Date)
            select obj;

要么:

var query = traces.Where(p => MyFunction(p.data_Closed.Date));

您可以使用DbFunctions.TruncateTime(StartDateTime)從 datetime 中刪除時間。

    if (form["closedend"] != "")
    {
         DateTime d = DateTime.Parse(form["closedend"]);
         traces = traces.Where(s => DbFunctions.TruncateTime(s.date_Closed) >= DbFunctions.TruncateTime(d));
    }

暫無
暫無

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

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