Как сравнить только дату без времени в типах DateTime в Linq и SQL с Entity Framework? - PullRequest
267 голосов
/ 25 марта 2009

Есть ли способ сравнить 2 переменные DateTime в Linq2Sql, но не учитывать часть времени.

Приложение сохраняет элементы в БД и добавляет дату публикации. Я хочу сохранить точное время, но все же смогу вытащить саму дату.

Я хочу сравнить 12/3/89 12:43:34 и 12/3/89 11:22:12 и не учитывать фактическое время дня, поэтому оба они считаются одинаковыми.

Я полагаю, что я могу установить все время дня на 00:00:00, прежде чем сравнивать, но я действительно хочу знать время суток, я просто хочу иметь возможность сравнивать только по дате.

Я нашел код с той же проблемой, и он сравнивает год, месяц и день отдельно. Есть ли лучший способ сделать это?

Ответы [ 10 ]

472 голосов
/ 25 марта 2009

попробуйте использовать свойство Date объекта DateTime ... ... 1003 *

if(dtOne.Date == dtTwo.Date)
    ....
56 голосов
/ 25 марта 2009

Для истинного сравнения вы можете использовать:

dateTime1.Date.CompareTo(dateTime2.Date);
36 голосов
/ 17 февраля 2014

Вот как я это делаю для работы с 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)

15 голосов
/ 05 апреля 2016

Если вы используете Entity Framework EntityFunctions.TruncateTime Если вы используете Entity Framework> = v6.0, тогда используйте DbFunctions.TruncateTime

Используйте любой (в зависимости от вашей версии EF) вокруг любого свойства класса DateTime, которое вы хотите использовать внутри запроса Linq

Пример

var list = db.Cars.Where(c=> DbFunctions.TruncateTime(c.CreatedDate) 
                                       >= DbFunctions.TruncateTime(DateTime.UtcNow));
12 голосов
/ 26 мая 2012
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....");
}
5 голосов
/ 10 марта 2016
DateTime? NextChoiceDate = new DateTime();
DateTIme? NextSwitchDate = new DateTime();
if(NextChoiceDate.Value.Date == NextSwitchDate.Value.Date)
{
Console.WriteLine("Equal");
}

Это можно использовать, если вы используете пустые поля даты.

4 голосов
/ 30 июня 2014
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
   }
2 голосов
/ 23 августа 2013
DateTime econvertedDate = Convert.ToDateTime(end_date);
DateTime sconvertedDate = Convert.ToDateTime(start_date);

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

Значение diff представляет количество дней для возраста. Если значение отрицательное, дата начала падает после даты окончания. Это хороший чек.

0 голосов
/ 19 октября 2011
        int o1 = date1.IndexOf("-");
        int o2 = date1.IndexOf("-",o1 + 1);
        string str11 = date1.Substring(0,o1);
        string str12 = date1.Substring(o1 + 1, o2 - o1 - 1);
        string str13 = date1.Substring(o2 + 1);

        int o21 = date2.IndexOf("-");
        int o22 = date2.IndexOf("-", o1 + 1);
        string str21 = date2.Substring(0, o1);
        string str22 = date2.Substring(o1 + 1, o2 - o1 - 1);
        string str23 = date2.Substring(o2 + 1);

        if (Convert.ToInt32(str11) > Convert.ToInt32(str21))
        {
        }
        else if (Convert.ToInt32(str12) > Convert.ToInt32(str22))
        {
        }
        else if (Convert.ToInt32(str12) == Convert.ToInt32(str22) && Convert.ToInt32(str13) > Convert.ToInt32(str23))
        {
        }
0 голосов
/ 25 марта 2009

В предложении join или where используйте свойство Date столбца. За кулисами выполняется операция CONVERT(DATE, <expression>). Это должно позволить вам сравнивать даты без времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...