[英]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.