在C#中,能否在范围选择中执行范围选择?

在C#中,能否在范围选择中执行范围选择?,c#,linq,datetime,visual-studio-2012,C#,Linq,Datetime,Visual Studio 2012,我最终想把今年的每个日期都列在一个列表中 我有下面的表格,上面列出了一个月的所有日期 using System; using System.Collections.Generic; using System.Linq; internal class Program { public static void Main(String[] args) { List<DateTime> ldtDa

我最终想把今年的每个日期都列在一个列表中

我有下面的表格,上面列出了一个月的所有日期

    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();
        }
    }
使用系统;
使用System.Collections.Generic;
使用System.Linq;
内部课程计划
{
公共静态void Main(字符串[]args)
{
List ldtDates=新列表();
随机rnd=新随机();
int intCurrentYear=DateTime.Now.Year;
int intcurrentmount=DateTime.Now.Month;
列出本月的日期=
可枚举的.范围(1,DateTime.DaysInMonth(intCurrentYear,intCurrentMonth))
.选择(i=>新日期时间(intCurrentYear、intCurrentMonth、i))
.ToList();
foreach(本月日期中的var q)
{
控制台写入线(q);
}
Console.WriteLine(“按以继续”);
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();
    }
}
var DatesThisYesr =
    Enumerable.Range(1, 12)
    .SelectMany(month =>
        Enumerable.Range(1, DateTime.DaysInMonth(intCurrentYear, month))
        .Select(day => new DateTime(intCurrentYear, month, day)))
    .ToList();
使用系统;
使用System.Collections.Generic;
使用System.Linq;
内部课程计划
{
公共静态void Main(字符串[]args)
{
List ldtDates=新列表();
随机rnd=新随机();
int intCurrentYear=DateTime.Now.Year;
int intcurrentmount=DateTime.Now.Month;
var DatesThisYesr=
可枚举。范围(1,12)。选择(y=>
可枚举的.范围(1,DateTime.DaysInMonth(intCurrentYear,y))
.选择(i=>新日期时间(intCurrentYear、intCurrentMonth、i))
).ToList();
foreach(日期中的变量q)
{
控制台写入线(q);
}
Console.WriteLine(“按以继续”);
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
ime]
System.Linq.Enumerable+其中SelectEnumerableInterator`2[System.Int32,System.Date
[输入法]
System.Linq.Enumerable+其中SelectEnumerableInterator`2[System.Int32,System.Date
[输入法]
System.Linq.Enumerable+其中SelectEnumerableInterator`2[System.Int32,System.Date
[输入法]
System.Linq.Enumerable+其中SelectEnumerableInterator`2[System.Int32,System.Date
[输入法]
System.Linq.Enumerable+其中SelectEnumerableInterator`2[System.Int32,System.Date
[输入法]
System.Linq.Enumerable+其中SelectEnumerableInterator`2[System.Int32,System.Date
[输入法]
System.Linq.Enumerable+其中SelectEnumerableInterator`2[System.Int32,System.Date
[输入法]
System.Linq.Enumerable+其中SelectEnumerableInterator`2[System.Int32,System.Date
[输入法]
System.Linq.Enumerable+其中SelectEnumerableInterator`2[System.Int32,System.Date
[输入法]
System.Linq.Enumerable+其中SelectEnumerableInterator`2[System.Int32,System.Date
[输入法]
System.Linq.Enumerable+其中SelectEnumerableInterator`2[System.Int32,System.Date
[输入法]
按继续
我可以使用For循环,但是应该可以通过Linq实现


谢谢,

使用
选择许多这样的代码:

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();
    }
}
var DatesThisYesr =
    Enumerable.Range(1, 12)
    .SelectMany(month =>
        Enumerable.Range(1, DateTime.DaysInMonth(intCurrentYear, month))
        .Select(day => new DateTime(intCurrentYear, month, day)))
    .ToList();

您当前正在选择一个序列-这就是为什么当您打印每个元素时,它会显示它是一个
WhereSelectEnumeratableIterator
。我怀疑您实际上想将其展平,因此您应该使用
SelectMany
而不是
Select
。请注意,您不希望使用
intcurrentmount
,但是您希望使用
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()
,因为您只是在迭代结果。请注意,使用有意义的范围变量名称使整个过程更具可读性。

您展示了您的尝试,太棒了!但是你不知道为什么失败(显然)。谢谢,我只是添加了失败尝试的输出。