Как вы заметили, downcasting работает только с Any
признаком, и да, он поддерживает только данные 'static
. Вы можете найти недавнюю дискуссию о том, почему здесь здесь . В принципе, реализовать отражение для ссылок на произвольные времена жизни сложно.
Также невозможно (на данный момент, по крайней мере) скомбинировать Any
с вашим пользовательским признаком. Однако недавно была создана библиотека macro для автоматической реализации Any
для вашей черты. Вы также можете найти здесь обсуждение .
var today = DateTime.Today;
var month = new DateTime(today.Year, today.Month, 1);
var first = month.AddMonths(-1);
var last = month.AddDays(-1);
Встраивают их, если Вам действительно нужны одна или две строки.
Путем я сделал, это в прошлом является первым, добираются, первый день этого месяца
dFirstDayOfThisMonth = DateTime.Today.AddDays( - ( DateTime.Today.Day - 1 ) );
Тогда вычитают день для получения, конец прошлого месяца
dLastDayOfLastMonth = dFirstDayOfThisMonth.AddDays (-1);
Тогда вычитают месяц для получения первого дня предыдущего месяца
dFirstDayOfLastMonth = dFirstDayOfThisMonth.AddMonths(-1);
Если существует шанс, что Ваши datetimes не являются строгими календарными датами, необходимо рассмотреть использование enddate сравнений исключения... Это будет препятствовать тому, чтобы Вы пропустили любые запросы, созданные во время даты Jan 31.
DateTime now = DateTime.Now;
DateTime thisMonth = new DateTime(now.Year, now.Month, 1);
DateTime lastMonth = thisMonth.AddMonths(-1);
var RequestIds = rdc.request
.Where(r => lastMonth <= r.dteCreated)
.Where(r => r.dteCreated < thisMonth)
.Select(r => r.intRequestId);
DateTime LastMonthLastDate = DateTime.Today.AddDays(0 - DateTime.Today.Day);
DateTime LastMonthFirstDate = LastMonthLastDate.AddDays(1 - LastMonthLastDate.Day);
Подход с помощью дополнительных методов:
class Program
{
static void Main(string[] args)
{
DateTime t = DateTime.Now;
DateTime p = t.PreviousMonthFirstDay();
Console.WriteLine( p.ToShortDateString() );
p = t.PreviousMonthLastDay();
Console.WriteLine( p.ToShortDateString() );
Console.ReadKey();
}
}
public static class Helpers
{
public static DateTime PreviousMonthFirstDay( this DateTime currentDate )
{
DateTime d = currentDate.PreviousMonthLastDay();
return new DateTime( d.Year, d.Month, 1 );
}
public static DateTime PreviousMonthLastDay( this DateTime currentDate )
{
return new DateTime( currentDate.Year, currentDate.Month, 1 ).AddDays( -1 );
}
}
Видят эту ссылку , http://www.codeplex.com/fluentdatetime для некоторых вдохновил расширения DateTime.
DateTime now = DateTime.Now;
int prevMonth = now.AddMonths(-1).Month;
int year = now.AddMonths(-1).Year;
int daysInPrevMonth = DateTime.DaysInMonth(year, prevMonth);
DateTime firstDayPrevMonth = new DateTime(year, prevMonth, 1);
DateTime lastDayPrevMonth = new DateTime(year, prevMonth, daysInPrevMonth);
Console.WriteLine("{0} {1}", firstDayPrevMonth.ToShortDateString(),
lastDayPrevMonth.ToShortDateString());
с использованием Fluent DateTime https://github.com/ FluentDateTime / FluentDateTime
var lastMonth = 1.Months().Ago().Date;
var firstDayOfMonth = lastMonth.FirstDayOfMonth();
var lastDayOfMonth = lastMonth.LastDayOfMonth();