我正在使用DateTime的集合,其中包含从日期A到日期B的所有日期。 我会收到一个看起来像1234567的字符串,1是星期日,2是星期二等等。
现在,想象一下我想使用具有上述配置的字符串来过滤我的日期集合,我们得到字符串1004007,这意味着我们必须过滤我们的DateTime集合,以便只在周日和星期三发生日期。星期六。
如何阅读整个字符串,找出我将要过滤的日期,然后根据一周中的哪些日期动态过滤我的收藏?
答案 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()));