如何解决搜索适用于除日期字段以外的所有字段
我想按日期和格式 (dd/MM/yyyy) 搜索数据,例如“20/01/2021”。搜索适用于 CREATE_DATE 的 ADDRESS 和 NAME 字段但不适用于。
这是我的代码:
// search
if (!string.IsNullOrEmpty(search))
{
List<string> terms = search.Split(',').ToList().ConvertAll(d => d.ToLower());
res = res.Where(x =>
terms.Any(
str => x.NAME.Contains(str) ||
x.ADDRESS.Contains(str) ||
x.DATE_CREATE.ToString().Contains(str)
));
var test = res.FirstOrDefault().DATE_CREATE.ToString();
}
这是请求:
http://localhost:6289/api/Customer?search=20/01/2021,hous
这是terms和test var的输出:
这就是日期的保存方式,它们的日期是日期时间类型
解决方法
我认为将数据时间转换为日期 ToString() 您需要将日期格式转换为“dd/MM/yyyy”,这是您的 url 中的参数 (search=20/01/2021) 然后这里 [x.DATE_CREATE.ToString ().Contains(str)] 我会使用 "equals" 像 [x.DATE_CREATE.ToString("dd/MM/yyyy").equals(str)] 来更具体地查询。
,您的代码实际上适用于我的机器,但只有在我使用@JustShadow 指出的适当文化设置的情况下。
适当的文化:导致 datetime.ToString()
以 dd/MM/yyyy 格式格式化日期。
出于测试目的,我使用了“es-ES”文化,例如在您的 if
语句中使用以下代码:
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
我建议根据此修改您的代码:
if (!string.IsNullOrEmpty(search))
{
List<string> terms = search.Split(',').ToList().ConvertAll(d => d.ToLower());
var originalCulture = Thread.CurrentThread.CurrentCulture;
try
{
// use any locale which results a datetime.ToString() output in dd/MM/yyyy format
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES"); ;
res = res.Where(x =>
terms.Any(
str => x.NAME.Contains(str) ||
x.ADDRESS.Contains(str) ||
x.DATE_CREATE.ToString().Contains(str)));
var test = res.FirstOrDefault().DATE_CREATE.ToString();
}
finally
{
Thread.CurrentThread.CurrentCulture = originalCulture;
}
}
如果您的输入始终为 dd/MM/yyyy 格式,这就足够了。
编辑:
您可以尝试在 ToString()
调用中使用自定义格式字符串来实现@bitapinches 建议的工作代码。我认为我的解决方案性能更好,因为不需要在 LINQ 将执行的每个比较中解析自定义格式字符串。以下是可供参考的替代方案:
if (!string.IsNullOrEmpty(search))
{
List<string> terms = search.Split(',').ToList().ConvertAll(d => d.ToLower());
res = res.Where(x =>
terms.Any(
str => x.NAME.Contains(str) ||
x.ADDRESS.Contains(str) ||
x.DATE_CREATE.ToString(@"dd\/MM\/yyyy").Contains(str)));
var test = res.FirstOrDefault().DATE_CREATE.ToString();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。