web-dev-qa-db-ja.com

LinqのDateTime型の時間のない日付のみをEntity FrameworkのSQLと比較するにはどうすればいいですか?

Linq2Sqlで2つのDateTime変数を比較する方法で、Time部分を無視する方法はありますか。

アプリはアイテムをDBに保存し、公開日を追加します。私は正確な時間を保ちたいが、それでも日付自体を引き出すことができるようにしたい。

12/3/89 12:43:34と12/3/89 11:22:12を比較し、実際の時刻を無視するようにしたいので、どちらも同じと見なされます。

私は私が比較する前に私は一日の時間を00:00:00に設定することができると思いますが、私は実際に私はちょうど日付だけで比較できるようにしたいだけです。

私は同じ問題を抱えているコードを見つけ、それらは年、月、日を別々に比較します。これを行うより良い方法はありますか?

267
Sruly

DateオブジェクトのDateTimeプロパティを使用してみてください。

if(dtOne.Date == dtTwo.Date)
    ....
472

本当の比較のために、あなたは使うことができます:

dateTime1.Date.CompareTo(dateTime2.Date);
56
Reed Copsey

これは私がLINQを扱うためにどのようにこれをするかです。

DateTime date_time_to_compare = DateTime.Now;
//Compare only date parts
context.YourObject.FirstOrDefault(r =>
                EntityFunctions.TruncateTime(r.date) == EntityFunctions.TruncateTime(date_to_compare));

dtOne.Date == dtTwo.Dateのみを使用する場合、LINQでは機能しません(エラー:指定された型メンバー 'Date'は、LINQ to Entitiesではサポートされていません)

36

Entity Framework <v6.0を使用している場合はEntityFunctions.TruncateTimeを使用します。Entity Framework> = v6.0を使用している場合はDbFunctions.TruncateTimeを使用します。

Linqクエリ内で使用したいDateTimeクラスプロパティの周りに(EFのバージョンに基づいて)どちらかを使用します。

var list = db.Cars.Where(c=> DbFunctions.TruncateTime(c.CreatedDate) 
                                       >= DbFunctions.TruncateTime(DateTime.UtcNow));
15
Korayem
DateTime dt1 = DateTime.Now.Date;
DateTime dt2 = Convert.ToDateTime(TextBox4.Text.Trim()).Date;
if (dt1 >= dt2)
{
    MessageBox.Show("Valid Date");
}
else
{
    MessageBox.Show("Invalid Date... Please Give Correct Date....");
}
12
Devarajan.T
DateTime? NextChoiceDate = new DateTime();
DateTIme? NextSwitchDate = new DateTime();
if(NextChoiceDate.Value.Date == NextSwitchDate.Value.Date)
{
Console.WriteLine("Equal");
}

NULL可能なDateFieldを使用している場合はこれを使用できます。

5
Code Geek
DateTime dt1=DateTime.ParseExact(date1,"dd-MM-yyyy",null);
DateTime dt2=DateTime.ParseExact(date2,"dd-MM-yyyy",null);

int cmp=dt1.CompareTo(dt2);

   if(cmp>0) {
       // date1 is greater means date1 is comes after date2
   } else if(cmp<0) {
       // date2 is greater means date1 is comes after date1
   } else {
       // date1 is same as date2
   }
4
Mohan Sharma
DateTime econvertedDate = Convert.ToDateTime(end_date);
DateTime sconvertedDate = Convert.ToDateTime(start_date);

TimeSpan age = econvertedDate.Subtract(sconvertedDate);
Int32 diff = Convert.ToInt32(age.TotalDays);

Diff値は、年齢の日数を表します。値が負の場合、開始日は終了日より後になります。これは良いチェックです。

2
dgsjr

Join句またはwhere句で、カラムのDateプロパティを使用します。舞台裏では、これはCONVERT(DATE, <expression>)オペレーションを実行します。これにより、時間なしで日付を比較できるようになります。

0
Adam Robinson