我最终希望在列表中获取当前年份的每个日期。
我有以下内容,它给了我一个月的所有日期..
using System;
using System.Collections.Generic;
using System.Linq;
internal class Program
{
public static void Main(String[] args)
{
List<DateTime> ldtDates = new List<DateTime>();
Random rnd = new Random();
int intCurrentYear = DateTime.Now.Year;
int intCurrentMonth = DateTime.Now.Month;
List<DateTime> DatesThisMonth =
Enumerable.Range(1, DateTime.DaysInMonth(intCurrentYear, intCurrentMonth))
.Select(i => new DateTime(intCurrentYear, intCurrentMonth, i))
.ToList();
foreach (var q in DatesThisMonth)
{
Console.WriteLine(q);
}
Console.WriteLine("Press <enter> to continue");
Console.ReadLine();
}
}
这适用于本月,但我想围绕此代码包装一个范围(1,12),如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
internal class Program
{
public static void Main(String[] args)
{
List<DateTime> ldtDates = new List<DateTime>();
Random rnd = new Random();
int intCurrentYear = DateTime.Now.Year;
int intCurrentMonth = DateTime.Now.Month;
var DatesThisYesr =
Enumerable.Range(1, 12).Select(y=>
Enumerable.Range(1, DateTime.DaysInMonth(intCurrentYear, y))
.Select(i => new DateTime(intCurrentYear, intCurrentMonth, i))
).ToList();
foreach (var q in DatesThisYesr)
{
Console.WriteLine(q);
}
Console.WriteLine("Press <enter> to continue");
Console.ReadLine();
}
}
以下是我的输出结果:
ime]
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Int32,System.DateT
ime]
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Int32,System.DateT
ime]
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Int32,System.DateT
ime]
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Int32,System.DateT
ime]
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Int32,System.DateT
ime]
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Int32,System.DateT
ime]
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Int32,System.DateT
ime]
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Int32,System.DateT
ime]
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Int32,System.DateT
ime]
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Int32,System.DateT
ime]
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Int32,System.DateT
ime]
Press <enter> to continue
我可以使用For循环,但是应该可以通过Linq执行此操作。
谢谢,
答案 0 :(得分:5)
像这样使用SelectMany
:
var DatesThisYesr =
Enumerable.Range(1, 12)
.SelectMany(month =>
Enumerable.Range(1, DateTime.DaysInMonth(intCurrentYear, month))
.Select(day => new DateTime(intCurrentYear, month, day)))
.ToList();
答案 1 :(得分:3)
您目前正在选择一系列序列 - 这就是为什么当您打印每个元素时,它会显示它是WhereSelectEnumeratableIterator
。我怀疑你实际想要扁平化,所以你应该使用SelectMany
而不是Select
。请注意,您不想要使用intCurrentMonth
- 您想要使用y
(这是一个有效代表的变量的奇怪名称月号码。
将它写为查询表达式可能更简单:
var dates = from month in Enumerable.Range(1, 12)
from day in Enumerable.Range(1, DateTime.DaysInMonth(year, month))
select new DateTime(year, month, day);
我没有看到任何理由在此处致电ToList()
,因为您只是在迭代结果。请注意使用有意义的范围变量名称如何使整个 更具可读性。