2010-10-19 5 views
2

je ce codeEntity Framework et LINQ - Comparer DateTime

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) 

Ce que je voudrais faire est cette

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

le problème est que je z.start_time a le temps partie aussi. Le jour DateTime n'a pas la partie heure enregistrée. Est-il possible de comparer la partie date de sans avoir cette erreur

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

quand je fais

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

Répondre

7

Une option consiste à calculer deux valeurs, comme ceci:

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; 
+0

Jon, Merci, comment renverser simple. Je ne sais pas pourquoi je rends les choses plus difficiles qu'elles ne le sont. Tu es l'homme. – jim

2

Vous ne pouvez pas utiliser .Date dans Entity Framework. Le moyen le plus simple que je connaisse pour gérer ceci est de faire un minimum + jour maximum:

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; 
+0

merci beaucoup pour votre aide. – jim