2014-10-08 153 views
2

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

db中的日期是日期時間並記錄時間。

如果用戶輸入搜索字符串「1/30/2014」,他們希望返回該日期隨時發生的條目。然而,12點以後有時間的東西不會被退回。

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

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

回答

7

可以使用Date property截斷一部分時間:

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

在這條路上你會包括這一天,因爲這兩個DateTime s爲午夜。

更新如果你使用LINQ到實體,不支持DateTime.Date,您可以使用此解決方案:Using DateTime in LINQ to Entities

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

我不知道,如果op是使用LINQ到實體(他們提到一個分貝),但如果他們是'日期'將不起作用。 – juharr 2014-10-08 14:21:28

+0

多數民衆贊成右 - 日期不可用 – tintyethan 2014-10-08 14:22:19

+0

@tintyethan:我編輯它。 – 2014-10-08 14:25:57

0

你說

與日期大於或等於給定日期

但是在你的代碼中你寫了

s.date_Closed <= d 

我認爲你必須>=改變<=獲得日期大於或等於d,現在你開始日期小於或等於d。

+0

好抓 - 我更新了示例代碼 – tintyethan 2014-10-08 16:22:11

0

對於本示例,您不需要任何其他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));