агрегированный список с linq с суммой - PullRequest
2 голосов
/ 20 декабря 2010

Я пытаюсь объединить перечисляемый список, который я сериализую

У меня есть данные, которые выглядят так:

Internet explorer    10
Internet explorer    15 
Mozille firefox      10

Я был таким, чтобы выглядеть так:

Internet explorer    25
Mozille firefox      10

мой класс выглядит следующим образом:

 public class BrowserVisits
 {
  public string BrowserName { get; set; }

  public int Visits { get; set; }
        }

мой текущий запрос на сериализацию перечисляемого списка (r) выглядит так:

var browserVisits = from r in reportData
      select new BrowserVisits
      {
       BrowserName = r.Dimensions.First(d => d.Key == Dimension.Browser).Value,
       Visits = int.Parse(r.Metrics.First(d => d.Key == Metric.Visits).Value)
      };

как мне составить группу с суммойв linq?

мне нужно пройти два запроса или я могу сделать один.

извинения, если это звучит расплывчато, это был долгий день, но я более чем рад добавитьна это, если это нуждается в разъяснении

Ответы [ 3 ]

3 голосов
/ 20 декабря 2010
var lstBrowserVisits = new List<BrowserVisits> 
            { 

                new BrowserVisits{BrowserName = "Internet explorer", Visits = 10},
                new BrowserVisits{BrowserName = "Internet explorer", Visits = 15},
                new BrowserVisits{BrowserName = "Mozille firefox", Visits = 10} 
            }; 

var res = (from browserVisit in lstBrowserVisits
           group browserVisit by browserVisit.BrowserName into g
           select new { BrowserName = g.Key, Visits = g.Sum(s => s.Visits) });
3 голосов
/ 20 декабря 2010

А как же:

public static IEnumerable<BrowserVisits> SumGroups(
    IEnumerable<BrowserVisits> visits)
{
    return visits.GroupBy(
        i => i.BrowserName,
        (name, browsers) => new BrowserVisits() {
            BrowserName = name,
            Visits = browsers.Sum(i => i.Visits)
        });
}

Это работает для меня против ваших образцов данных.

0 голосов
/ 18 октября 2013

Имя Значение

Internet Explorer 10
Интернет проводник 15
Mozille firefox 10

var sum= list.GroupBy(a => a.Name).Select(a => new { Total= a.Sum(b => b.value),Name= a.Key }).OrderByDescending(a => a.Total).ToList();
...