使用一串天来过滤一系列日期

时间:2011-01-17 17:52:15

标签: c# datetime filter

我正在使用DateTime的集合,其中包含从日期A到日期B的所有日期。 我会收到一个看起来像1234567的字符串,1是星期日,2是星期二等等。

现在,想象一下我想使用具有上述配置的字符串来过滤我的日期集合,我们得到字符串1004007,这意味着我们必须过滤我们的DateTime集合,以便只在周日和星期三发生日期。星期六。

如何阅读整个字符串,找出我将要过滤的日期,然后根据一周中的哪些日期动态过滤我的收藏?

2 个答案:

答案 0 :(得分:2)

试一试:

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 :(得分:1)

将星期几转换为整数,然后转换为字符串,并使用Contains查看它是否在输入字符串中:

string days = "1004007";
var result = datetimes
   .Where(dt => days.Contains(((int)dt.DayOfWeek + 1).ToString()));