LINQ合并了一个集合

Wil*_*pez 2 c# linq

我需要将它展平为新系列中的一个项目.

输入将是IEnumerable集合.基类如下所示:

    public class ConversionsResult
    {
        public int SiteId { get; set; }

        public int TotalLeads { get; set; }
        public int TotalCalls { get; set; }
        public int TotalEmails { get; set; }
        public int UniqueVisits { get; set; }

        public int MetricYear { get; set; }
        public int MetricMonth { get; set; }
        public string DeviceCategory { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

扁平化的类看起来像这样:

SiteId, MetricMonth, MetricYear SUM(TotalLeads), SUM(TotalEmails), SUM(UniqueVisits), CONCATENATE(DeviceCategory).
Run Code Online (Sandbox Code Playgroud)

笔记:

  • SiteId,MetricMonth,MetricYear将具有与原始集合中相同的值
  • 需要添加总属性
  • DeviceCategory将有三个不同的值,逗号分隔,例如"桌面,移动,平板电脑".

我可以完成另一条路线,但我想使用LINQ.我试图破解我找到的一些解决方案,但这是一团糟,所以我排除了我试过的噪音.

Hab*_*bib 10

你需要通过组(Enumerable.GroupBy) SiteId,MetricMonth并且MetricYear然后选择类似的结果:

var query  = list.GroupBy(r => new { r.SiteId, r.MetricMonth, r.MetricYear })
            .Select(grp => new
            {
                SiteId = grp.Key.SiteId, 
                MetricMonth = grp.Key.MetricMonth, 
                MetricYear = grp.Key.MetricYear, 
                TotalLeads = grp.Sum(r=> r.TotalLeads), 
                TotalEmails = grp.Sum(r=> r.TotalEmails), 
                UniqueVisits = grp.Sum(r=> r.UniqueVisits), 
                DeviceCategory = String.Join(",", grp.Select(r=> r.DeviceCategory)),
            });
Run Code Online (Sandbox Code Playgroud)