我是C#的新手,想制作一个包含所有星期四日期的下拉列表?
我目前有一个包含所有这些日期的SQL表,但宁愿在函数中生成它们并用于填充下拉列表。
任何最佳方法的例子?
更新:我最终使用了日历bootstrap-datepicker并禁用了除星期四之外的所有日子。这给了我周四的当月,解决了我的问题。
答案 0 :(得分:3)
您可以执行类似的操作,在那里您要对要显示的第一个星期四进行硬编码,然后设置您想要的星期四。
var list = new List<DateTime>();
DateTime firstThursday = new DateTime(2018,02,20);
var numberOfThursdayWanted = 1000;
for (int i = 0; i < numberOfThursdayWanted; ++i)
{
list.Add(firstThursday.AddDays(i*7));
}
return list;
答案 1 :(得分:2)
您可以使用LINQ生成“全部”列表:
DateTime firstThursday = DateTime.MinValue.AddDays(Enumerable.Range(0, 7).First(d => DateTime.MinValue.AddDays(d).DayOfWeek == DayOfWeek.Thursday));
int weeks = (int)Math.Ceiling((DateTime.MaxValue - firstThursday).Days / 7.0);
var allThursdays = Enumerable.Range(0, weeks).Select(d => firstThursday.AddDays(d * 7));
请注意allThursdays
只是LINQ查询。如果将所有DateTimes
存储在集合中没有意义。但也许你只想要在特定时间跨度之间的那些,即:
DateTime start = DateTime.Today.AddYears(-10);
DateTime end = DateTime.Today.AddYears(10);
DateTime[] allThursDaysInLast10YearsUntilNext10Years = allThursdays
.Where(d => d >= start && d <= end)
.ToArray();
答案 2 :(得分:1)
首先,您需要以某种方式缩小搜索结果范围。例如按年份,或按Dimitri建议的计数。
为此您可以查看以下答案:Create an array or List of all dates between two dates
一旦你拥有了IEnumerable<DateTime>
,你就必须使用LINQ过滤星期六,如下所示:
IEnumerable<DateTime> allDateTimes = null; //change this for whatever range you need
IEnumerable<DateTime> onlyThursdays = allDateTimes.Where(d => d.DayOfWeek == DayOfWeek.Thursday);