Можно ли это сделать с помощью LINQ / Lambda, C # 3.0 - PullRequest
1 голос
/ 23 апреля 2010

Цель : создание дат на основе номеров недель

Ввод: StartDate, WeekNumber

Вывод: Список дат от номера недели, указанного до даты начала Т.е. если начальная дата 23 апреля 2010 года, а номер недели 1, программа должна вернуть даты с 16 апреля 2010 года до начальной даты.

Функция

public List<DateTime> GetDates(DateTime startDate,int weeks)
        {
            List<DateTime> dt = new List<DateTime>();
            int days = weeks * 7;

            DateTime endDate = startDate.AddDays(-days);
            TimeSpan ts = startDate.Subtract(endDate);
            for (int i = 0; i <= ts.Days; i++)
            {
                DateTime dt1 = endDate.AddDays(i);
                dt.Add(dt1);
            }

            return dt;
        }

Я вызываю эту функцию как

DateTime StartDate = DateTime.ParseExact("20100423", "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
            List<DateTime> dtList = GetDates(StartDate, 1);

Программа работает нормально.

Вопрос использует функцию C # 3.0, такую ​​как Linq, Lambda и т. Д. Могу ли я переписать программу.

Почему? Потому что я изучаю linq и lambda и хочу реализовать то же самое. Но на данный момент знаний недостаточно, чтобы сделать то же самое самостоятельно.

Спасибо.

Ответы [ 2 ]

1 голос
/ 23 апреля 2010

Вы можете попробовать что-то вроде

int weeks = 1;
var days = from d in Enumerable.Range(-weeks * 7, weeks * 7 + 1)
           select StartDate.AddDays(d);
1 голос
/ 23 апреля 2010

Примерно так:

public IEnumerable<DateTime> GetDates2(DateTime startDate, int weeks)
{
  var days = weeks * 7;
  return Enumerable.Range(-days, days + 1).Select(i => startDate.AddDays(i));
}

Метод Enumerable.Range вернет последовательность целых чисел в указанном диапазоне, в вашем примере от -7 до 0.

После этого я просто использую каждое целое число, чтобы вычесть это количество дней из вашего начального startDate, построив IEnumerable<DateTime>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...