LINQ合并集合

本文关键字:集合 合并 LINQ | 更新日期: 2023-09-27 18:04:09

我需要将它平展为新集合中的一个项目。

输入将是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; }
    }

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

SiteId, MetricMonth, MetricYear SUM(TotalLeads), SUM(TotalEmails), SUM(UniqueVisits), CONCATENATE(DeviceCategory).

指出:

  • SiteId, MetricMonth, MetricYear将具有与原始集合相同的平展值
  • 需要添加的总属性
  • DeviceCategory将有三个不同的值,以逗号分隔,例如:"桌面、手机、平板电脑"。

我可以通过另一种方式完成这个任务,但是我想使用LINQ。我试着破解了一些我发现的解决方案,但它完全是一团糟,所以我已经排除了我尝试的噪音

LINQ合并集合

您需要按(Enumerable.GroupBy) SiteId, MetricMonthMetricYear进行分组,然后选择如下结果:

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)),
            });