实体框架IQueryable - 具体日期

时间:2016-05-18 16:00:09

标签: sql-server entity-framework linq datetime dynamic-linq

我正在尝试过滤特定日期的数据行:

当前代码采用字典,并将过滤器应用于可查询,如下所示:

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 Server如何构建其转换后的DateTime,我们可以看到它永远不会排队,因为它的格式如下:

May 18 2016  3:55PM

我曾尝试将自定义where子句添加到DateTime类型的属性中,但是," LINQ to Entities"似乎不喜欢' ToString(" MMMM-DD-YYY")'调用并生成错误。

我希望能够提供一个日期,例如2015-05-05,并且在2015年5月5日之前就已经开始了 - 我是否遗漏了一些显而易见的东西才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

以下(简单)示例解决了我的问题:

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

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

请注意月份和日期之间的两个空格,因为SQL Server似乎也有这样的空格,这对于" LIKE"条款匹配任何东西。