Linq groupBy以简单/干净的方式组合到List <>

2Fa*_*uBR 2 c# linq group-by

我用这种方法做了一个重构.在我们有很多循环和虚拟代码之前.这是我可以去的,但我想我可以更简单.

我想我可以直接从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)

Jam*_*iec 6

你是如此接近,但你不需要手动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语法进行比较.我个人更喜欢这种语法,但这只是一种品味问题.