0

如果我有以下访问 sql 数据库的日期以将其与用户输入的字符串进行比较:

public IQueryable<Audit> FindAllAuditsByNameDate(String name, String date)
        {
            return from audit in db.Audits
                   where audit.EventTime.ToString().Contains(date) && audit.User.UserName.Contains(name)
                   orderby audit.User.UserName
                   select audit;
        }

它失败是用户在日期中输入“/”字符。我该如何解决这个问题?

4

3 回答 3

2

试试DateTime.Parse。它能够理解输入日期时间的许多常见格式。

DateTime dateStart = DateTime.Parse(date);
DateTime dateEnd = dateStart.AddDays(1);

return from audit in db.Audits
       where audit.EventTime >= dateStart &&
             audit.EventTime < dateEnd &&
             audit.User.UserName.Contains(name)
       orderby audit.User.UserName
       select audit;

如果DateTime.Parse不解析您想要的格式,您可以随时使用DateTime.ParseExact并提供您自己的格式字符串。

于 2012-04-20T18:28:26.853 回答
2

考虑到 EventTime 是 DateTime 类型?你需要检查它的价值。首先将字符串日期转换为DateTime

DateTime newDate = Convert.ToDateTime(date);
return from audit in db.Audits
                   where audit.EventTime.Value == newDate && audit.User.UserName.Contains(name)
                   orderby audit.User.UserName
                   select audit;
于 2012-04-20T18:31:51.380 回答
0

警告 - 不要使用Contains.

包含的缺点

假设我有两个列表对象。

List 1      List 2
  1           12
  2            7
  3            8
  4           98
  5            9
  6           10
  7            6

使用 Contains,它将搜索 List-2 中的每个 List-1 项目,这意味着迭代将发生 49 次!!!


回答你原来的问题

public IQueryable<Audit> FindAllAuditsByNameDate(String name, String date)
{
    DateTime Dt;
    if (DateTime.TryParse(date, out Dt))
    {
        return from audit in db.Audits
                where audit.EventTime.ToString().Contains(date) && audit.User.UserName.Contains(name)
                orderby audit.User.UserName
                select audit;
    }
    return null;
}

尝试解析

  1. 返回一个布尔值,指示它是否成功。
  2. 它只是在内部尝试/捕获为什么没有例外地实现,因此它很快。
  3. 在值可能为 InValid 的情况下使用它。

解析

  1. 引发异常。
  2. 如果您确定该值有效,请使用它
于 2012-04-20T18:46:12.157 回答