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。DateTimesを入力するための多くの一般的な形式を理解することができます。

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であると考えていますか?その値に対してチェックする必要があります。最初に文字列dateを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

コンテインのデメリット

2 つのリスト オブジェクトがあるとします。

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;
}

TryParse

  1. 成功したかどうかを示す bool を返します。
  2. 内部で試行/キャッチするだけで、高速になるように例外なしで実装されます。
  3. 値が InValid の可能性がある場合に使用します。

パース

  1. 例外をスローします。
  2. 値が有効であることが確実な場合に使用します
于 2012-04-20T18:46:12.157 に答える