Время преобразования даты в linq - PullRequest
1 голос
/ 21 октября 2008

Я хотел сравнить дату и время в этом формате "20.07.2008" с данными в базе данных в формате "20.07.2008 7:14:53".

Я попытался использовать предложение «like», но оно не сработало, потому что предложение «like» использует только строку, а то, что я использую - формат даты и времени.

Может кто-нибудь сказать, как преобразовать и сравнить его в базе данных и подтянуть дату и время.

  protected void User_Querytime()
    {
    DataClasses2DataContext dc1 = new DataClasses2DataContext();
    DateTime date1;


    string date = Request.QueryString.Get("TimeOfMessage");
    date1 = Convert.ToDateTime(date);

    var query7 = from u in dc1.syncback_logs
                 where u.TimeOfMessage = date1
                 orderby u.TimeOfMessage descending
                 select u;
    GridView1.DataSource = query7;
    GridView1.DataBind();
    }

Ответы [ 6 ]

3 голосов
/ 21 октября 2008

Я предполагаю, что у вас проблема, потому что date1 содержит только дату, а ваша база данных содержит полные значения даты / времени. Чтобы найти совпадения, вам нужно выбрать один из следующих подходов:

1) Удалите информацию о времени из значений базы данных перед сравнением их с вашей целью 2) Преобразуйте вашу цель в диапазон, затем найдите значения базы данных в этом диапазоне.

List<DateTime> dateTimes = new List<DateTime>();
dateTimes.Add(DateTime.Parse("7/20/2008 7:14:53 AM"));
dateTimes.Add(DateTime.Parse("7/20/2008 12:12:01 AM"));
dateTimes.Add(DateTime.Parse("7/21/2008 9:00:00 AM"));
dateTimes.Add(DateTime.Parse("7/20/2009 7:14:53 AM"));

DateTime targetDate = Convert.ToDateTime("7/20/2008");

// Remove time info from data in database
var matchingDates = from date in dateTimes
                    where date.Date == targetDate
                    select date;

// Or use your target date to create a range
DateTime rangeStart = new DateTime(targetDate.Year, targetDate.Month, targetDate.Day, 0, 0, 0);
DateTime rangeEnd = new DateTime(targetDate.Year, targetDate.Month, targetDate.Day, 23, 59, 59);

var matchingDates2 = from date in dateTimes
                     where (date >= rangeStart) && (date <= rangeEnd)
                     select date;
1 голос
/ 21 октября 2008

Хотя я не могу проверить вашу точную проблему, я смог сравнить даты со следующим кодом.

    // Random Date Collection
    List<DateTime> dateTimes = new List<DateTime>();
    dateTimes.Add(DateTime.Parse("7/20/2008 7:14:53 AM"));
    dateTimes.Add(DateTime.Parse("7/20/2008 7:14:54 AM"));
    dateTimes.Add(DateTime.Parse("7/20/2009 7:14:53 AM"));

    DateTime myDateTime = DateTime.Parse("7/20/2008");

    var query = from d in dateTimes
                where d.ToShortDateString() == myDateTime.ToShortDateString()
                select d;
0 голосов
/ 26 сентября 2012
using System.Data.Objects;

используйте выше и измените ваш запрос, как показано ниже:

 var bla = (from log in context.Contacts
               where EntityFunctions.TruncateTime(log.ModifiedDate) < today.Date
               select log).FirstOrDefault();
0 голосов
/ 21 октября 2008

Если предположить, что атрибут TimeOfMessage имеет DateTime, то вы сможете сделать TimeOfMessage.Date == дата1

0 голосов
/ 21 октября 2008

Если я правильно понимаю ваш вопрос, вы можете просто использовать

where u.TimeOfMessage.Date == date1
0 голосов
/ 21 октября 2008

Вместо того, чтобы сравнивать дату напрямую, сравните ее с двумя минимальными / максимальными значениями, которые вы бы приняли. Поэтому вместо «DbDateCol = mydate» сделайте «DbDateCol> = myDate.Date и DbDateCol

Используя свойство Date, вы отрежете компонент времени (принудительно установите его в 0). Добавив день, вы получите начало следующего дня, связав его с датой вашего экземпляра DateTime.

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