Entity Framework и Linq - Сравнение DateTime - PullRequest
2 голосов
/ 19 октября 2010

У меня есть этот код

public List<CalendarData> GetCalendarData(DateTime day)
    {
        List<CalendarData> list = new List<CalendarData>();
        using (dataContext = new VTCEntities())
        {

            DateTime test = new DateTime(2010, 10, 20, 17, 45, 0);

            var data = from z in dataContext.ReservationsSet
                       where z.start_time.Value == test
                       select z;

            foreach (var r in data)

То, что я хотел бы сделать, это иметь

var data = from z in dataContext.ReservationsSet
                   where z.start_time.Value == day
                   select z;

Проблема в том, что у z.start_time также есть часть времени. День DateTime не имеет записанной части времени. Есть ли способ сравнить часть даты без получения этой ошибки

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported. 

когда я делаю это

var data = from z in dataContext.ReservationsSet
           where z.start_time.Value.Date == test
           select z;

Ответы [ 2 ]

7 голосов
/ 19 октября 2010

Один из вариантов - вычислить два значения, например:

DateTime day = ...;
DateTime nextDay = day.AddDays(1);

var data = from z in dataContext.ReservationsSet
                   where z.start_time.Value >= day &&
                         z.start_time.Value < nextDay
                   select z;
2 голосов
/ 19 октября 2010

Вы не можете использовать .Date в Entity Framework. Самый простой способ, который я знаю, чтобы справиться с этим, это сделать минимум + максимум дня:

DateTime test = new DateTime(2010, 10, 20, 17, 45, 0);
DateTime startDay = test.Date;
DateTime endDay = startDay.AddDays(1);

var data = from z in dataContext.ReservationsSet
                   where z.start_time.Value >= startDay && z.start_time.Value < endDay
                   select z;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...