私のデータベースでは、日付はdatetimeのように保存されますが、検索/フィルタリングを実行したいときは、正確な時間を無視して日付のみに基づいてください。私はそれを行う方法を理解するのに多くの時間を費やし、最終的に自分で実用的な解決策を得ました:
string val = rule.Data;
if (!string.IsNullOrEmpty(val))
{
switch (rule.Field)
{
case "Date": {
DateTime parsedDate = DateTime.ParseExact(
val,
"dd/MM/yyyy",
CultureInfo.InvariantCulture);
var pYear = parsedDate.Year;
var pMonth = parsedDate.Month;
var pDay = parsedDate.Day;
rows = rows.Where(o => o.Date >= parsedDate && o.Date <= new DateTime(pYear, pMonth, pDay, 12, 59, 40)); break;
}
}
}
これは正常に機能しています。少し変更が必要ですが、上記のコードを使用できると思います。しかし、今日、私の大学は、ここで開発された以前のプロジェクトからのソリューションを私に渡しました。このソリューションははるかに短く、可能であればそれを使用したいと思います。次のようになります。
string val = rule.Data;
if (!string.IsNullOrEmpty(val))
{
switch (rule.Field)
{
case "Date": { rows = rows.Where(o => o.Date.ToString("dd/MM/yyyy") == val); break; }
}
}
これを試してもコードは壊れませんが、データもフィルタリングしていません。私はいつも空の結果を得ます。o.Date.ToString("dd/MM/yyyy")
問題はそこにあると思います。ToString()
DateTime オブジェクトにこのように使用しても問題ないかわかりません。私が使用している例ではToString()
、ここで提供しているようなフォーマット タイプも取得していますToString("dd/MM/yyyy")
が、私の場合ToString()
はどこにもオーバーロードされていません。これは DateTime オブジェクトを操作する標準的な方法ですか、それともToStrin()
定義済みの場所が見つかりません。最後に、上記のコードに基づく実際の例を教えてください。