1

私のプログラムは、ユーザーに日付を入力するように要求し、それが日時に変換されます。

var fromDate = DateTime.Parse(txtFromDate.Text);

これを DateTime フィールドに変換する理由は、次のようにテーブル内の DateTime フィールドと比較したいからです。

var q = gc.GraphicRequests.Where(a => a.DateInWork == fromDate);

ただし、問題があります。ユーザーが日付 (2013 年 6 月 17 日) を入力して DateTime フィールドに変換すると、結果の日付は 6/17/2013 12:00:00 AMのようになります。

問題は、その日付に一致するテーブル内のレコードを検索しようとしているときに、テーブル内の日付が次のようになっているため、ヒットが得られないことです: 6/17/2013 05:35 AMまたはその他の時間. つまり、日付は正しいのですが、時刻が一致しません。

私の質問は、日付を比較して時間を除外するにはどうすればよいですか? DateTime フィールドの時刻に関係なく、その日付に一致するすべてのレコードが必要です。

4

3 に答える 3

4

部分のないDate現在を表すプロパティを使用してみることができます。DateTimeTime

var q = gc.GraphicRequests.Where(a => a.DateInWork.Date == fromDate);

DateInWorkが nullable (つまり) の場合はDateTime?、次を使用します。

var q = gc.GraphicRequests.Where(a => 
    a.DateInWork.HasValue && a.DateInWork.Value.Date == fromDate);

ただし、Entity Framework を使用している場合は、TruncateTimeメソッドを確認する必要がある場合があります。

var q = gc.GraphicRequests.Where(a =>
    EntityFunctions.TruncateTime(a.DateInWork).Value == fromDate);
于 2013-06-25T16:47:21.830 に答える
2

クエリプロバイダーがそれを翻訳できる場合、これはあなたがしたいことを意味的に表すオプションになります:

var q = gc.GraphicRequests.Where(a => a.DateInWork.HasValue 
    && a.DateInWork.Value.Date  == fromDate);

そうでない場合は、日付がその日の開始日と終了日の間にあるかどうかを確認してください。

DateTime someDate;
DateTime fromDate = someDate.Date, toDate = someDate.Date.AddDays(1);

var q = gc.GraphicRequests.Where(a => a.DateInWork >= fromDate 
    && a.DateInWork < toDate);
于 2013-06-25T16:53:27.920 に答える
1

エンティティ フレームワークを使用している場合は、EntityFunctions.TruncateTimeメソッドを使用します。

var q = gc.GraphicRequests
          .Where(a => EntityFunctions.TruncateTime(a.DateInWork) == fromDate);

Linq to SQL を使用している場合は、単純にDateTime.Dateプロパティを評価できます。または、次のようなこともできますa.DateInWork.Date.Year > 2000

于 2013-06-25T16:50:36.403 に答える