【问题标题】:Entity Framework IQueryable - specific date实体框架 IQueryable - 特定日期
【发布时间】:2016-05-18 16:00:08
【问题描述】:

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

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

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

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

我希望能够提供一个日期,例如 2015 年 5 月 5 日,并将其设置为 2015 年 5 月 5 日 - 我是否遗漏了一些明显的东西来让它工作?

【问题讨论】:

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


    【解决方案1】:

    以下(基本)示例解决了我的问题:

    DateTime givenDate = DateTime.Parse(pair.Value);
    string dateTimeConverted = givenDate.ToString("MMMM  d yyyy");
    
    queryable = queryable.Where(pair.Key + ".ToString()" + ".Contains(\"" + dateTimeConverted + "\")");
    

    注意月和日之间的两个空格,因为 SQL Server 似乎也有,所以“LIKE”子句匹配任何内容都需要这个。

    【讨论】:

      猜你喜欢
      • 2012-08-18
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      相关资源
      最近更新 更多