Pergunta

Estou tentando obter uma lista de datas do meu banco de dados que acabarão sendo usadas para preencher um calendário. Cada 'evento de calendário' tem uma data de início e data de término, preciso obter todas as datas entre e incluindo a data de início e final.

Estou preso na declaração de onde, pois não tenho certeza do que usar para isso

public List<EventFeed> GetCalendarDates()
    {

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

ATUALIZAR

Só para deixar claro, se eu tiver um evento de calendário chamado Foobar, que começa em 22/08/2010 e termina em 24/08/2010, então quero que minha lista retorne:

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

Obrigado KB

Foi útil?

Solução

Eu tive que fazer algo semelhante recentemente, usei um Func<> Para extrair as datas do intervalo e usar o resultado na consulta LINQ.

Eu adicionei o mesmo Func para sua consulta LINQ abaixo. Você não especificou o nome do objeto que é devolvido por GetEventsList() Então, apenas substitua o EventItem Digite para o primeiro parâmetro de tipo no func <> com qualquer tipo necessário.

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();
}

Outras dicas

Você quer dizer que deseja selecionar todos os eventos que começaram na data ou após a data de início e terminou na data ou antes da data de término!

Se sim, então isso vai ajudar

var query = from @event in events
                        where @event.Start.Date >= startDate.Date
                              && @event.End.Date <= endDate.Date
                        select @event;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top