Фильтрация диапазона дат с помощью строки дней - PullRequest
0 голосов
/ 17 января 2011

Я работаю с коллекцией DateTime со всеми датами от даты A до даты B. Мне будет вручена строка, которая выглядит как 1234567, 1 - воскресенье, 2 - вторник и т. Д.

Теперь представьте, что я хочу отфильтровать свою коллекцию дат, используя строку с описанной выше конфигурацией, и мы получим строку 1004007, то есть нам придется фильтровать нашу коллекцию DateTime, чтобы иметь только даты, которые происходят в воскресенье, в среду и суббота.

Как я могу прочитать всю строку, выяснить, по каким дням я буду фильтровать, а затем динамически фильтровать мою коллекцию в соответствии с этими днями недели?

Ответы [ 2 ]

2 голосов
/ 17 января 2011

Попробуйте:

List<DateTime> dates = ...;
string filter = "1004007";

List<DateTime> filteredDates = dates.Where(d =>
    filter.Contains(((int)d.DayOfWeek + 1).ToString())).ToList();

Или, если хотите, вы можете сначала создать список дней, которые являются вашим фильтром, а не просто использовать функцию String.Contains.Если ваш список дат очень велик, выполнение этой работы может повысить производительность:

List<DateTime> dates = ...;
string filter = "1004007";
var daysOfWeek = filter.Distinct().Where(c => c != '0')
                       .Select(c => (DayOfWeek)(int.Parse(c.ToString()) - 1))

List<DateTime> filteredDates = (from d in dates
                                join dw in daysOfWeek on d.DayOfWeek equals dw
                                select d).ToList();
1 голос
/ 17 января 2011

Преобразуйте день недели в целое число, затем в строку, и используйте Contains, чтобы увидеть, есть ли оно во входной строке:

string days = "1004007";
var result = datetimes
   .Where(dt => days.Contains(((int)dt.DayOfWeek + 1).ToString()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...