2010-08-04 6 views
1

Je suis tring pour obtenir une liste de dates de ma base de données qui sera finalement utilisé pour remplir un calendrier. Chaque 'événement de calendrier' a une date de début & date de fin, je dois obtenir toutes les dates entre &, y compris le début & date de fin.C# linq dates entre

je suis coincé sur la clause WHERE, comme je ne suis pas sûr de ce à utiliser pour ce

public List<EventFeed> GetCalendarDates() 
    { 

     return (from eventsList in GetEventsList()  
       select new EventFeed() 
         { 
          //EventDate = todo 
         }).ToList(); 
    } 

MISE À JOUR

juste pour être clair, si j'ai un événement de calendrier appelé foobar qui commence 22/08/2010 et se termine le 24/08/2010, alors je veux que mon retour de liste:

22/08/2010, 23/08/2010, 24/08/2010

merci kb

Répondre

2

je devais faire quelque chose de similaire récemment, j'ai utilisé un Func<> pour extraire les dates de la gamme et le résultat utilisé dans la requête LINQ.

J'ai ajouté le même Func à votre requête Linq ci-dessous. Vous n'avez pas spécifié le nom de l'objet renvoyé par GetEventsList(), remplacez simplement le type EventItem pour le premier paramètre de type dans le Func <> avec le type dont vous avez besoin.

public static List<EventFeed> GetCalendarDates() 
{ 
    Func<EventItem, List<DateTime>> extractEventDates = eventItem => 
                  { 
                   var dates = new List<DateTime>(); 
                   for (var date = eventItem.StartDate; 
                    date <= eventItem.EndDate; 
                    date = date.AddDays(1)) 
                   { 
                    dates.Add(date); 
                   } 
                   return dates; 
                  }; 

    return (from eventItem in GetEventsList() 
      from eventDate in extractEventDates(eventItem) 
      select new EventFeed 
         { 
          EventDate = eventDate 
         }).ToList(); 
} 
+0

merci fletcher, je suis venu avec quelque chose de similaire, mais votre solution est moins de code, merci kb –

0

Vous voulez dire que vous voulez sélectionner tous les événements qui ont commencé le ou après la date de début et se terminaient à ou avant la date de fin!

Si oui, cela vous aidera

var query = from @event in events 
         where @event.Start.Date >= startDate.Date 
           && @event.End.Date <= endDate.Date 
         select @event; 
+0

Salut mho, merci pour votre réponse, mais d'où vient-elle? @ event.Start.Date –

+0

Salut mho, j'ai mis à jour mon poste ... –