【问题标题】:LINQ to Datatable Group ByLINQ 到数据表分组依据
【发布时间】:2015-10-30 01:50:03
【问题描述】:

我有一个返回 3 列数据的查询。

Country | Religion | Population
--------------------------------
US | Christianity | 80000000
US | Islam | 1000000
US | Judaism | 5000000
China | Buddhism | 100000000
China | Christianity | 2345737

等等。

我需要按国家/地区显示这些数据。 JSON 对象看起来像

[ { "Country" : "US", 
             {
                "Christianity" : 80000000, 
                "Islam": 1000000, 
                "Judaism": 5000000 
             }
      },
      { "Country" : "China", 
             {
                "Buddhism " : 100000000, 
                "Christianity ": 2345737
             }
      }
   ]

最好的方法是什么?将数据放入数据表并使用 LINQ 进行查询(如果是,那么如何?)

或者也许创建一个字典>。但我对如何填充数据感到困惑。

也许创建一个包含 Country、Dictionary 的类并返回该类的数组。

谢谢。

【问题讨论】:

  • 是什么阻止您在查询中简单地分组?
  • 查询已在内循环中按国家/地区分组。根据您的说法,查询的输出会是什么样子?我不太清楚该怎么做。谢谢。
  • 正确答案永远不是数据表。

标签: c# sql linq datatable


【解决方案1】:

您可以使用Group by in LINQ 对数据进行分组。

你可以这样使用:

var grouped = from d in sampleData
                group d by d.Country
                into g
                select new {
                         Country = g.Key,
                         Data = g.Select(i => new {
                                             Religion = i.Religion,
                                             Population = i.Population
                                         })
                          };

但是一旦序列化成 JSON,它看起来就不会完全一样了。

【讨论】:

  • 以 ;-) 开头的 JSON 无效。属性名称不能以空格结尾。你不能有未命名的属性。
  • @RobertMcKee,你说得对,没有属性可以保存每个组的内部数据。
  • sampleData 是数据表吗?我也不明白罗伯特说这不是一个有效的 JSon。哪个属性以空格结尾?
  • 只需通过 jsonlint.com 运行您的示例 JSON,但为了使示例 JSON 有效,您需要一个属性来保存以下示例中的 Data 之类的组. { "Country": "China", "Data": { "Buddhism ": 100000000, "Christianity ": 2345737 } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 2014-12-09
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
相关资源
最近更新 更多