分组列表中的列表

时间:2015-09-21 11:53:38

标签: c# linq list group-by

我有问题列表: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)
});

按用户分组和计数总和。

但是我怎样才能管理同样的事情,不仅仅是列表中的一个项目,而是所有列表?

1 个答案:

答案 0 :(得分:0)

好的,我想你是说你可以为一个Issue运行此查询,但是你希望能够在List<Issue>的所有项目上运行它。

我假设您不想单独通过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)
               }
               );

声明:

这完全是从内存完成的,没有测试。

相关问题