我对这个方法进行了重构。在我们有很多循环和伪代码之前。这是我所能做到的,但我想我可以更简单。
我想我可以直接从 * 组中选择并以正确的方式放入列表中。
这可能吗?或者我必须有这个循环?
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;
}
最佳答案
你是如此接近,但你不需要手动添加
到列表 - 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();
}
请注意,这与之前的答案相同,只是使用 Lamda 语法来进行比较。我个人更喜欢这种语法,但这只是个人喜好问题。
关于c# - Linq groupBy IGrouping 以简单/干净的方式列出 <>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42136772/