C# 从列表中以年和月的方式对名称进行分组

C# 从列表中以年和月的方式对名称进行分组,c#,asp.net,datetime,collections,C#,Asp.net,Datetime,Collections,我创建了一个具有两个属性的类,一个是datetimedatatype,另一个是string public class name1 { public DateTime dob { get; set; } public string name { get; set; } } 然后页面加载创建了一个列表 DateTime d1 = new DateTime(1989, 5, 12); DateTime d2 = new DateTime(1989, 5, 26); DateT

我创建了一个具有两个属性的类,一个是
datetime
datatype,另一个是string

public class name1
{
public DateTime dob { get; set; }
public string name { get; set; }
}
然后页面加载创建了一个列表

    DateTime d1 = new DateTime(1989, 5, 12);
    DateTime d2 = new DateTime(1989, 5, 26);
    DateTime d3 = new DateTime(1989, 3, 12);
    DateTime d4 = new DateTime(1986, 3, 21);
    DateTime d5 = new DateTime(1990, 8, 19);

    List<name1> randmoptn=new List<name1>();
    name1 n1=new name1();
    n1.name="rachit";
    n1.dob=d1;
    name1 n2=new name1();
    n2.name="abhinav";
    n2.dob=d2;
    name1 n3=new name1();
    n3.name="mandeep";
    n3.dob=d3;
    name1 n4=new name1();
    n4.name="jasmeet";
    n4.dob=d4;
    name1 n5=new name1();
    n5.name="rajat";
    n5.dob=d5;
    randmoptn.Add(n1);
    randmoptn.Add(n2);
    randmoptn.Add(n3);
    randmoptn.Add(n4);
    randmoptn.Add(n5);
DateTime d1=新的DateTime(1989,5,12);
DateTime d2=新的日期时间(1989,5,26);
DateTime d3=新的日期时间(1989,3,12);
DateTime d4=新的日期时间(1986,3,21);
DateTime d5=新的日期时间(1990,8,19);
List randmoptn=新列表();
名称1 n1=新名称1();
n1.name=“rachit”;
n1.dob=d1;
名称1 n2=新名称1();
n2.name=“abhinav”;
n2.dob=d2;
名称1 n3=新名称1();
n3.name=“mandeep”;
n3.dob=d3;
name1 n4=新的name1();
n4.name=“jasmete”;
n4.dob=d4;
name1 n5=新的name1();
n5.name=“rajat”;
n5.dob=d5;
随机添加(n1);
随机添加(n2);
randmoptn.添加(n3);
randmoptn.添加(n4);
随机添加(n5);
现在我想要 所需输出应为

1986年

第3个月

1986年3月21日雅斯梅特

1989年

第3个月

1989年3月12日mandeep

第5个月
1989年5月12日rachit

1989年5月26日abhinav

1990年

第8个月


19/8/1990拉贾特

如果您想要的输出如下

  • 有名字的DoB
那就这样做吧

foreach item in YourList  
{  
   print item.dob.year; // this will return year in integer format
   print item.dob.month; // this will return month in integer format
   print item.dob; // this will return DoB as dateformat, do whatever formating you want 
   print item.name; // this will return Name as String  
}

如果需要,请在同一行中打印DoB和名称

是否要在屏幕中打印输出?有很多方法,Linq、元组、排序、编写NameDOBCollection类。。。你试过什么。你还需要从中得到什么。你是否需要Name1类,你是否需要其他类似Alpha排序的名称。这个问题对我来说太模糊了。我想在没有linq.+1的情况下对“太模糊”注释进行修改,但基本上你需要实现IComparable,让你的类按birthdate属性排序,对列表排序,然后循环并打印你需要的值。谢谢你的帮助。我已经完成了。
    var q=from x in randmoptn
            group x by new { Year=x.dob.Year,Month=x.dob.Month} into month 
            group month by month.Key.Year into year
            select new { Year=year.Key,Months=year.OrderBy (y =>y.Key.Month )};

    foreach (var year in q) {
        Console.WriteLine("year {0}",year.Year);
        foreach (var month in year.Months) {
            Console.WriteLine("month {0}",month.Key.Month);
            foreach (var item in month) {
                Console.WriteLine("{0:dd/MM/yyyy},{1}",item.dob,item.name);
            }

        }
    }