【问题标题】:Group by for list in list对列表中的列表进行分组
【发布时间】:2015-12-18 02:44:44
【问题描述】:

我有问题列表:List<Issue> 其中Issue 是类:

public class Issue : BaseEntity
{
    private string m_KeyString;

    [JsonProperty("expand")]
    public string Expand { get; set; }

    [JsonProperty("id")]
    public int Id { get; set; }

    #region Special key solution
    [JsonProperty("key")]
    public string ProxyKey
    {
        get
        {
            return Key.ToString();
        }
        set
        {
            m_KeyString = value;
        }
    }

    [JsonIgnore]
    public IssueKey Key
    {
        get
        {
            return IssueKey.Parse(m_KeyString);
        }
    }
    #endregion Special key solution

    [JsonProperty("fields")]
    public Fields Fields { get; set; }
}

Fields 类看起来像这样:

public class Fields
{
    [JsonProperty("summary")]
    public string Summary { get; set; }

    [JsonProperty("assignee")]
    public Assignee Assignee { get; set; }

    [JsonProperty("worklog")]
    public List<WorkLog> WorkLogs { get; set; }
}

还有班级WorkLog:

public class WorkLog : BaseEntity
{
    [JsonProperty("updateAuthor")]
    public string Author { get; set; }

    [JsonProperty("timeSpent")]
    public string TimeSpent { get; set; }

    [JsonProperty("timeSpentSeconds")]
    public int TimeSpentSeconds { get; set; }
}

我想输出Author - SUM (TimeSpentSeconds)

所以我需要按Author 分组,然后得到SUM。

对于Issues 列表中的每个项目,我都会这样做:

var sumTime = issue.Fields.WorkLogs.GroupBy(x => x.Author).Select(x => new
{
    User = x.Key.Name,
    Amount = x.Sum(s => s.TimeSpentSeconds)
});

按用户分组并计算总和。

但是我怎样才能不仅对列表中的一项而且对所有列表都进行相同的管理?

【问题讨论】:

  • 循环并添加到列表中

标签: c# linq list group-by


【解决方案1】:

好的,我认为您是说可以针对单个 Issue 运行此查询,但您希望能够针对 List&lt;Issue&gt; 中的所有项目运行它。

我假设您不想通过Issue 单独拆分它,所以我要做的是:

List<Issue> issues = // get Issues from wherever
var sumTime = issues.SelectMany(issue => issue.Fields.WorkLogs)
               .GroupBy(x => x.Author)
               .Select( x => new
               {
                    x.Key.Name, 
                    Amount = x.Sum(s => s.TimeSpentSeconds)
               }
               );

免责声明:

这完全是凭记忆完成的,没有经过测试。

【讨论】:

  • 看起来它可以工作,但结果与循环相同 - 用户未分组。好像在Issue分组之后,我也应该在collection中分组?
  • 不...这是我的错...按作者分组-这是个坏主意...因为作者是班级。更好的是按 Author.Name 分组
猜你喜欢
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 2021-07-11
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多