System.Date 型はないので、残念ながら System.DateTime で動作させる必要があります。ただし、これは新しい問題ではなく、既知の解決策があります。
もう少し情報が必要かもしれません。テーブルからレコードを取得するために正確に何を使用しているか、それらのレコードを保持するために何を使用しているか、取得の背後にあるデータベース クエリをどのように構造化していますか?
日付/時刻値の時刻要素を気にしない場合、最初にできることは、DB クエリの一部として切り捨てることです。T-SQL の式は次のようになります。
SELECT CONVERT(datetime, CONVERT(varchar(20), GetDate(), 101)) as Today
文字列に行ったり戻ったりせずに同じ結果が得られる操作があります。SQL Server 2008 以降では、キャストできる日付型がありますが、上記のクエリは比較的簡潔で、どの SQL Server バージョンでも機能します。 2000年以降。
次に、それができない場合 (たとえば、変更できないストアド プロシージャを使用している場合)、System.DateTime で利用可能な Date プロパティがあり、時刻コンポーネントをゼロにして値を返します (たとえば、DateTime.Now.Date == DateTime.Today
) 。 . Linq の OrderBy() や List.Sort() など、ラムダを受け入れることができる並べ替え方法を使用している場合は、値を変更せずにその値を射影できます。または、値をまったく処理したくない場合は、テーブルを下に移動して、列の各フィールドを Date プロパティの値に設定するだけで値を変更できます。他の誰かがタイムスタンプを気にする可能性がある場合は、これらの値を DB に保存しないでください。
コメントから編集:
System.DateTime には常に時刻コンポーネントがあります。.NET の日時は、単一の Int64 "Ticks" 値に基づいています。1「ティック」~= 100ns。時間、分、秒などの時間に関連するすべてのプロパティは、「日付」コンポーネントの年、月、日と同様に、そのティック値に基づいて計算されます。たとえば、Seconds プロパティは、Ticks 値から開始し、モジュロを 1 分あたりのティック数 (6 億) で割ってから、結果を 1 秒あたりのティック数 (1000 万) で割ることによって計算されます。
したがって、「日付」と「時刻」の概念を切り離すことはまったく不可能です。これらは両方とも同じ数値に格納されているからです。最善の方法は、時間プロパティがすべてゼロと評価されるように、864,000,000,000 (24 時間のティック数) で割り切れるティック数で DateTime を指定することです。