2013-10-28 42 views
2

我嘗試在實體框架中進行搜索查詢。我有'Id','ProjectName','Description'和'modificationdate'等表項目。我想在'ProjecName','Description'和'modificationdate'上執行搜索。我成功地執行在「項目名」 &「說明」搜索,但我不知道如何按日期進行檢索使用實體框架執行按日期搜索

var found = from n in context.Project 
          where n.projectName.Contains(SearchKey) || 
          n.description.Contains(SearchKey) 
         select n; 
+0

看看實體函數http://msdn.microsoft.com/en-us/library/system.data.objects.entityfunctions_methods%28v=vs.110%29.aspx – James

+2

有什麼問題像' ||修改> DateTime.Now'? –

+0

@ ta.speot.is搜索將包括時間。你需要一個實體函數來截斷時間 – James

回答

2

可以使用greather高於>,低於<和等於==運營商例如(查看this查看完整列表)按日期搜索。例如獲得項目修改一個星期前,以下:

DateTime.Now.AddDays(-7) > n.modificationdate 

如果您不希望包括時間,你可以使用Date屬性來排除它:

DateTime.Now.AddDays(-7).Date > n.modificationdate.Date 

編輯:通過給定的日期搜索:

date == n.modificationdate 

哪裏date是給定的日期。如果在SearchKey變量(我假設它是string)中指定日期,則必須首先將其解析爲日期。

+0

如果您在下午2點進行搜索,則截斷時間將會不準確,搜索將不會從7天前的下午1點後撤回。 – James

+0

重點是由於時間的緣故,你仍然有部分日子。只是截斷時間,並提供更準確的搜索 – James

+0

我已經更新了我的問題,並註釋了'DateTime'的'Date'屬性。 –

2

帶你在說什麼從註釋:

其實我嘗試在給定日期進行搜索

如果你想搜索的修改在給定日期,只是搜索對於大於或等於日期開始的值,然後小於一天之後的所有值。

var searchDate = new DateTime(2013, 2, 5); // or searchDateWithTime.Date 
var searchDatePlusOne = searchDate.AddDays(1); 

return from n in context.Project 
     where n.ModificationDate >= searchDate 
      && n.ModificationDate < searchDatePlusOne 
     select n; 

如果n.ModificationDate包含日期,僅此而已,那麼n.ModificationDate == searchDate是足夠的謂語。