过滤日期格式是否包含字符串

时间:2021-07-14 16:04:05

标签: c#

我在数据库中有一个这种格式的日期

2019-02-17 14:26:09.0600000

在前端表上它是这样显示的

17-feb-2019

我如何查询它以便当我输入“feb”时查询将在开始日期获取所有带有 feb 的数据?

这是我目前的代码。但这个词没有获取任何数据。

  var searchText = "feb 17";
  query = await baseQuery.Where(x => x.StartDate.Date.ToString().Contains(searchText.ToLower()))

1 个答案:

答案 0 :(得分:0)

我会避免尝试将用户输入的字符串解析为日期。用户总能找到一种方法来输入模棱两可或完全无意义的格式。

理想情况下,您使用 DateTimePicker 控件(您尚未指定使用的 UI 框架,如果有的话),这将允许他们选择日期。然后您就可以访问具有许多有用属性的 DateTime 对象。例如,.Month

所以它看起来像这样:

DateTime searchDate = DateTimePicker.Value;
query = await baseQuery.Where(x => x.StartDate.Month == searchDate.Month && x.StartDate.Year == searchDate.Year);

如果您没有 DateTimePicker 并且您确实需要获取用户字符串,则可以执行以下操作:

Console.WriteLine("Enter Date (e.g. 01-JAN-2021):");
string searchString = Console.ReadLine();

//Note, "dd-MMM-yyyy" could (and probably should) be replaced with an array of valid datetime formats that a user can enter
if (DateTime.TryParseExact(searchString.ToUpper(), "dd-MMM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime outputDate))
{
    query = await baseQuery.Where(x => x.StartDate.Month == outputDate.Month && x.StartDate.Year == outputDate.Year);
}
else
{
//tell user invalid date format
}