【问题标题】:BETWEEN operator for string in LINQ to SQL queryLINQ to SQL 查询中字符串的 BETWEEN 运算符
【发布时间】:2017-07-31 17:17:52
【问题描述】:
from p in table
where ID == 201
&& date => 20160601
&& date <= 20160901
select {ID, name};
q.Dump();

数据库中的日期是字符串简单格式。 我正在尝试将 SQL 查询转换为 LINQ。在 SQL 中,BETWEEN 运算符用于选择给定范围内的值。但是,BETWEEN 不能与 LINQ 语句一起使用,所以我收到一个错误,它说 => 不能应用于日期字段的字符串和 int 类型的操作数。任何帮助都会被挪用。我尝试了 DateTime,但它对我不起作用。

【问题讨论】:

  • 不是=&gt;,而是&gt;==&gt; 用于 lambdas。
  • 你的意思是这样吗?日期 =>.20160601
  • 是的,应该是date &gt;= 20160601
  • 它不工作。得到同样的错误。 >= 不能应用于 LINQ 中的字符串或 int
  • 这意味着date 现在是一个字符串。您必须解析它以获取整数或强制转换 20160601 所以它是一个字符串。 Normaly 你会使用 Date 类来完成这样的任务,以避免类似的问题

标签: linq linq-to-sql


【解决方案1】:

由于 LINQ to Entities 不支持 Convert.ToDateTime(为什么不支持?)并且您的日期格式是合理的字符串格式,您可以将其作为字符串进行比较:

from p in table
where ID == 201
&& date.CompareTo("20160601") >= 0
&& date.CompareTo("20160901") <= 0
select { ID, name };

【讨论】:

  • 当我尝试使用 convert.ToDateTime 运行它时出现错误。 “LINQ to Entities 无法识别 'System.DateTime ToDateTime(System.String)' 方法,并且该方法无法转换为存储表达式。”
  • 这令人失望 - LINQ to SQL 处理得很好......答案已更新。
【解决方案2】:

试试这个工作代码:

var q = from p in table
where p.ID == 201
&& p.date >= DateTime.ParseExact("20160601", "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture)
&& p.date <= DateTime.ParseExact("20160901", "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture)
select p;
q.Dump();

【讨论】:

    猜你喜欢
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 2011-07-06
    相关资源
    最近更新 更多