我正在寻找一种按日期获得分组列表的方法。
我按日期成功排序了我的列表,但我可以想一下如何在新列表中获取包含所有分组对象的列表。
List<PersonneWithDate> personneList = GetPersonnelsByDay ();
var groups = from p in personneList
group p by new { day = p.Date.Day, month = p.Date.Month , year= p.Date.Year } into d
select new { dt = string.Format("{0}/{1}/{2}", d.Key.day,d.Key.month,d.Key.year), count = d.Count()};
给我一个列表,其中包含一个具有dt和count但是我想要分组的所有PersonneWithDate的对象。
我该怎么做?
答案 0 :(得分:1)
我不确定我是否理解你的问题,但这是你所追求的吗?
List<PersonneWithDate> personneList = GetPersonnelsByDay();
var groups =
(
from p in personneList
group p by p.Date.Date into d
select new
{
dt = d.Key.ToShortDateString(),
count = d.Count(),
personnel = d.ToList(),
}
).ToList();
(我也简化了查询分组。)
答案 1 :(得分:0)
你可以这样做
Date.Date
string
的int
的IEnumerable<PersonneWithDate>
的请参阅以下代码:
List<PersonneWithDate> personneList = GetPersonnelsByDay();
var groups = from p in personneList
group p by p.Date.Date into d
select new
{
dt = d.Key.ToString("dd/MM/yyyy"),
count = d.Count(),
// if you need that persons collection should be a list, then call .ToList() after Select()
persons = d.Select(t => t)
};
Lambda方式
List<PersonneWithDate> personneList = GetPersonnelsByDay();
var groups = personneList.GroupBy(p => p.Date.Date).Select(d => new
{
dt = d.Key.ToString("dd/MM/yyyy"),
count = d.Count(),
// if you need that persons collection should be a list, then call .ToList() after Select()
persons = d.Select(t => t)
});
来自Date
的{{1}}属性截断时间,因此如果在访问Date属性时有DateTime
,则Date等于new DateTime(2015,1,1,12,30,59)
,所以
new DateTime(2015,1,1)
是真的
答案 2 :(得分:0)
您可以调用ToList
方法将每组PersonneWithDate
作为列表:
//...
select new { dt = string.Format("{0}/{1}/{2}",d.Key.day,d.Key.month,d.Key.year),
count = d.Count(),
persons=d.ToList()
};