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);
}
}
}