Não consigo pensar em uma linha fácil de uma ou duas que receba os meses anteriores no primeiro dia e no último dia.
Estou usando o LINQ para acessar um aplicativo da web de pesquisa e eles apertaram um novo requisito.
A pesquisa deve incluir todas as solicitações de serviço do mês anterior. Portanto, se for 15 de abril, preciso de todos os IDs de solicitação do Marches.
var RequestIds = (from r in rdc.request
where r.dteCreated >= LastMonthsFirstDate &&
r.dteCreated <= LastMonthsLastDate
select r.intRequestId);
Eu simplesmente não consigo pensar nas datas facilmente sem mudar. A menos que eu seja cego e negligencie um método interno de fazê-lo.
A maneira como eu fiz isso no passado é primeiro no primeiro dia deste mês
Subtraia um dia para terminar o mês passado
Subtraia um mês para obter o primeiro dia do mês anterior
fonte
return date.AddDays(-(date.Day-1))
contrareturn new DateTime(date.Year, date.Month, 1);
e o desempenho dos primeiros mais de 2000 iterações é melhor (923ms 809ms newing-se contra o retorno do mesmo objecto)usando o Fluent DateTime https://github.com/FluentDateTime/FluentDateTime
fonte
fonte
Eu uso este simples liner:
Esteja ciente de que isso retém o tempo.
fonte
Uma abordagem usando métodos de extensão:
Consulte este link http://www.codeplex.com/fluentdatetime para obter algumas extensões inspiradas do DateTime.
fonte
O caso de uso canônico no comércio eletrônico são as datas de vencimento dos cartões de crédito, MM / aa. Subtraia um segundo em vez de um dia. Caso contrário, o cartão aparecerá expirado durante todo o último dia do mês de vencimento.
fonte
Se houver alguma chance de que suas datas não sejam datas de calendário estritas, considere usar comparações de exclusão de datas finais ... Isso impedirá que você perca as solicitações criadas durante a data de 31 de janeiro.
fonte
fonte
Esta é uma resposta à resposta de Mike W:
Você pode chamar assim:
fonte