我正在寻找一种喂养 d3.js bubble chart 的好方法。使用来 self 的 MVC 应用程序的数据。 例如,标准气泡图需要以下形式的嵌套数据:
{
"name": "flare",
"children": [
{
"name": "analytics",
"children": [
{
"name": "cluster",
"children": [
{
"name": "CNN",
"size": 3938
}
]
},
{
"name": "graph",
"children": [
{
"name": "MTV",
"size": 3534
}
]
}
]
}
]
}
我在服务器端拥有的是对 SQL 数据库的 linq 查询:
var results = from a in db.Durations
where a.Category == "watch"
group a by a.Description
into g
select new
{
name = g.Key,
size = g.Select(d => new{d.Begin, d.End}).Sum(d => SqlFunctions.DateDiff("hh", d.Begin, d.End))
};
return Json(results, JsonRequestBehavior.AllowGet);
查询结果解析为Json,如下所示:
[{"name":"CNN","size":1950},{"name":"MTV","size":1680}]
我一直在思考什么是实现正确格式并从查询结果创建嵌套结构的好方法。
- 服务器端,使用 anonymous types
- 服务器端,调整 linq-query
- 客户端,使用 d3.js nest
- 使用更简单的气泡模型,因为就我的目的而言,嵌套 并不真正需要有 child 的结构
- 与 1-4 完全不同且酷得多的东西
感谢您的任何意见。
最佳答案
将您的返回声明替换为以下声明。
return Json(new
{
name = "Sites",
children = results
},
JsonRequestBehavior.AllowGet);
这将为您提供以下内容:
{
"name": "Sites",
"children": [
{
"name": "CNN",
"size": 1950
},
{
"name": "MTV",
"size": 1680
}
]
}
举个例子,假设每个网站都有一个附加的string Type
属性,其值例如“News”
或“Music”
。然后你可以执行以下操作。
return Json(new
{
name = "Sites",
children = results.GroupBy(site => site.Type).Select(group => new
{
name = group.Key,
children = group
}
},
JsonRequestBehavior.AllowGet);
这会给你类似下面的东西。
{
"name": "Sites",
"children": [
{
"name": "News",
"children": [
{
"name": "CNN",
"size": 1950
},
{
"name": "The Verge",
"size": 1600
}
]
},
{
"name": "Music",
"children": [
{
"name": "MTV",
"size": 1680
},
{
"name": "Pandora",
"size": 2000
}
]
}
]
}
关于c# - Linq 查询 d3.js 图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19667350/