【问题标题】:Using LINQ to project a list to a key / count 2-dimensional array使用 LINQ 将列表投影到键/计数二维数组
【发布时间】:2012-04-11 21:27:31
【问题描述】:

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

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 Charts 中使用)。这是数组将包含的内容:

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

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

【问题讨论】:

    标签: c# arrays json linq projection


    【解决方案1】:
    users.GroupBy(x => x.FirstName)
         .Select(x => new { Name = x.Key, Count = x.Count() })
    

    【讨论】:

    • 很好的例子!有什么方法可以在没有属性名称的情况下获取数组?在我的情况下,它们实际上并不需要。
    • 抱歉,我无法理解您的问题。是不是类似于.Select(x =&gt; x.Count())
    • 您的示例导致匿名对象数组与多维数组。你的例子让我达到了 99%,因为我可以使用对象数组来构建我需要的东西;我只是想知道是否可以立即构建多维数组。
    • 你用什么multidim数组,例如users.GroupBy(x =&gt; x.FirstName).ToDictionary(x =&gt; x.Key, x =&gt; x.Count());不够?
    • 也许是这个? users.GroupBy(x =&gt; x.FirstName).Select(x =&gt; new object[] { x.Key, x.Count()}).ToArray()
    【解决方案2】:

    这个呢?

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

    【讨论】:

      【解决方案3】:
      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 绘制 charts

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

      【讨论】:

        猜你喜欢
        • 2012-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多