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