使用 LINQ 将列表投影到键/计数二维数组

本文关键字:二维数组 LINQ 列表 投影 使用 | 更新日期: 2023-09-27 18:30:43

假设我有一个这样的对象列表:

var users = new List<User>();
users.Add(new User() { FirstName = "Ek0nomik" });
users.Add(new User() { FirstName = "Ek0nomik" });
users.Add(new User() { FirstName = "Foobar" });

我正在尝试从该列表中获取一个包含该名称的名称和计数的二维数组(目的是将其作为 JSON 返回并在 Google 图表中使用)。 这是数组将包含的内容:

["Ek0nomik", 2],
["Foobar", 1]

我最初尝试使用 .Select 来投影一个新对象,但该项目针对列表中的每个对象,因此我认为该方法不会让我到达那里。

使用 LINQ 将列表投影到键/计数二维数组

users.GroupBy(x => x.FirstName)
     .Select(x => new { Name = x.Key, Count = x.Count() })

这个呢?

var asd = users.GroupBy(x => x.FirstName).Select(x => new {Name = "['" + x.Key + "', "+ x.Count() + "]"});
foreach (var t in asd)
{
Console.WriteLine(t.Name);
}
var groupedUsers = users.GroupBy(x => x.FirstName)
            .Select(x => new { Name = x.Key, Count = x.Count() });
var dictionary = groupedUsers.ToDictionary(u=>u.Name, u=>u.Count);

var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var output = serializer.Serialize(dictionary);

输出将看起来

{"Ek0nomik":2,"Foobar":1}

并使用 JSON 绘制图表。

如果您使用的是页面方法或Web服务,则不需要带有JavaScriptSerializer的行,只需要字典来生成该JSON。