2016-05-18 84 views
0

我試圖在特定日期過濾數據的列:實體框架的IQueryable - 具體日期

當前的代碼需要的字典,並應用過濾器可查詢,像這樣:

queryable = pageSettings.FiltersDictionary.Aggregate(queryable, (current, keyValuePair) => 
current.Where(keyValuePair.Key + ".ToString()" + ".Contains(\"" + keyValuePair.Value + "\")")); 

從這個生成的SQL將適用於以下WHERE子句:

WHERE CAST([Extent1].[TimeStarted] AS nvarchar(max)) LIKE N'%2015-05-05%'} 

使用

SELECT CONVERT(nvarchar(max), getdate()) 

,看看我們如何SQL服務器結構的轉換日期時間可以看到它永遠不會排隊,因爲它是格式化的,像這樣:

May 18 2016 3:55PM 

我已嘗試添加自定義的where子句類型的屬性但是,DateTime,「LINQ to Entities」似乎不喜歡'ToString(「MMMM-DD-YYY」)'調用併產生一個錯誤。

我希望能夠提供一個日期,如2015-05-05,並讓它像2015年5月5日一樣 - 我是否錯過了明顯的東西以使其發揮作用?

回答

0

以下(裸機)例如解決了我的問題:

DateTime givenDate = DateTime.Parse(pair.Value); 
string dateTimeConverted = givenDate.ToString("MMMM d yyyy"); 

queryable = queryable.Where(pair.Key + ".ToString()" + ".Contains(\"" + dateTimeConverted + "\")"); 

注意兩個月份和日期之間的間隔,如SQL服務器似乎有一個爲好,這是需要的「LIKE」子句來匹配任何東西。