我用这种方法做了一个重构.在我们有很多循环和虚拟代码之前.这是我可以去的,但我想我可以更简单.
我想我可以直接从from*group&select以正确的方式放入列表中.
这可能吗?或者我必须有这个循环?
private IEnumerable<ESMatchDate> groupBydate(IEnumerable<ESMatch> matches)
{
List<ESMatchDate> lMatchDates = new List<ESMatchDate>();
if (null != matches && matches.Any())
{
var dates = from ESMatch in matches
group ESMatch by ESMatch.BeginDate.ToShortDateString() into newGroup
orderby Convert.ToDateTime(newGroup.Key)
select newGroup;
foreach (var d in dates)
lMatchDates.Add( new ESMatchDate
{ Date = Convert.ToDateTime(d.Key), Matches = d.ToList()} );
}
else
lMatchDates = null;
return lMatchDates;
}
Run Code Online (Sandbox Code Playgroud)
你是如此接近,但你不需要手动Add
到列表 - LINQ可以为你做这一切
private IEnumerable<ESMatchDate> groupBydate(IEnumerable<ESMatch> matches)
{
if (null == matches || !matches.Any())
{
return null;
}
return matches.GroupBy(x => x.BeginDate.Date)
.OrderBy(x => x.Key)
.Select(x => new ESMatchDate{ Date = x.Key, Matches = x.ToList() })
.ToList();
}
Run Code Online (Sandbox Code Playgroud)
请注意,这与之前的答案相同,仅使用Lamda语法进行比较.我个人更喜欢这种语法,但这只是一种品味问题.