2013-07-11 51 views
9

問題: 我有一個搜索表單,允許用戶搜索一些地方的記錄日期在2個日期(MM/DD/YYYY)比較2個日期時間變量只是日期部分在LINQ與EF

全部之間的記錄和對象是Datetime類型,但我需要比較的是日期部分而不是時間部分。

根據MSDN,日期屬性在LINQ支持書面不會讓我追加.Date到拉姆達部分。然而這樣的說法:

錯誤:

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported. 

例:

x.DateCreated.Date 

我相信這個問題出現了很多 - 何我解決它嗎?

我想我可以墊通過追加23:59:59 = 86399秒至< =部分

下面是聲明的其他日期。 (DB是一個上下文對象)

model.Contacts = 
       db.Prospects.Where(x => x.DateCreated >= df.Date && x.DateCreated <= dt.Date) 
        .OrderByDescending(x => x.DateCreated) 
        .Take(100) 
        .ToList(); 
+1

當你嘗試'x.DateCreated.Date'時,你會得到哪個錯誤信息? – Treb

+0

'DateCreated'是什麼類型? –

+0

DateCreated只是一個DateTime類型 – Slinky

回答

14

您應該使用TruncateTime功能:

EntityFunctions.TruncateTime(x.DateCreated) 
+6

替換爲'DbFunctions.TruncateTime' – gor

1

我採用如下方案

DateTime startDate = new DateTime(df.Year, df.Month, df.Day, 0,0,0); 
DateTime endDate = new DateTime(df.Year, df.Month, df.Day, 23,59,59); 

model.Contacts = 
       db.Prospects.Where(x => x.DateCreated >= startDate && x.DateCreated <= endDate) 
        .OrderByDescending(x => x.DateCreated) 
        .Take(100) 
        .ToList(); 
4

您應該使用DbFunctions.TruncateTime()在實體框架版本6中。

var fromDate = criteria.FromCreatedDate.Value.Date; 
items.Where(i => DbFunctions.TruncateTime(i.CreatedOnDate) >=fromDate); 

要獲得其日期大於沒有fromdate忽略timepart所有項目。

Thanks @gor。