c# - Linq groupBy IGrouping 以简单/干净的方式列出 <>

标签 c# linq group-by

我对这个方法进行了重构。在我们有很多循环和伪代码之前。这是我所能做到的,但我想我可以更简单。

我想我可以直接从 * 组中选择并以正确的方式放入列表中。

这可能吗?或者我必须有这个循环?

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/

相关文章:

c# - OpenPop : how can I turn off DEBUG printing?

c# - 已经有一个打开的 DataReader 与此命令关联,必须先关闭 linq

c# - 具有离散错误代码的 .NET 异常处理

c# - 使用 linq 将重复项分组并计数到字典中

MySQL GROUP BY 优化 - InnoDB 与 MyISAM?

c# - vs13 中的 "Object reference not set to an instance of an object"错误

C# 反射泛型属性类型

c# - 字符串中只允许单一类型的标记

arrays - PostgreSQL:有效地将数组列聚合为组的一部分

MySQL join, count and group by 多个数据库