【发布时间】:2017-07-22 12:39:05
【问题描述】:
我正在处理这行代码:
query = query.Where(p =>
p.ChckNumber.ToString().Contains(globalSearch.ToString()) ||
p.BankAccount.ToString().Contains(globalSearch.ToString()) ||
p.Description.ToString().Contains(globalSearch.ToString()) ||
p.CheckAmount.ToString().Contains(globalSearch) ||
p.ClearedDate.ToString().Contains(globalSearch.ToString()) ||
p.SentDate.ToString().Contains(globalSearch.ToString()));
使用这行代码我基本上是在进行搜索,当globalSearch 是string 并且BankAccount 和Description 之类的列是varchar 时,它似乎工作正常,但是,当@987654327 @ 是 Int 或 DateTime(-2233 或 4/9/2013)列 CheckAmount (int)、ClearedDate (DateTime)、SentDate (DateTime),它返回 0 行,如果 globalSearch 匹配 int在ChckNumber 有效!
我做错了什么?
我在 SQL Server 中运行了这个查询:
SELECT CONVERT(VARCHAR(MAX), ClearedDate) FROM myTable
我所有的日期都返回 2017 年 9 月 9 日
【问题讨论】:
-
因此,如果用户键入“2”,您希望返回任何数字或日期字段包含 2 的所有项目(如数字 112 或日期 01/03/2017)。似乎不是很有用。
-
请在 sql profiler 的帮助下检查触发了什么查询。这将使您了解如何调整 linq。我猜它与 ToString() 如何将数据转换为字符串以及采用哪种格式有关。
-
尝试逐步调试您的代码,1-尝试检查“Tostring”方法是否在您的输入数据上正常工作。 2-尝试检查您的 sql-server 数据库中的日期时间格式是否与您的日期时间输入一致
-
您是否尝试过使用
ToString中的格式?例如:p.ClearedDate.ToString("MM/dd/yyyy") -
你对日期的逻辑是什么?你想要精确的日期匹配吗?
标签: c# sql iqueryable