我正在查询我的数据库,以便在图表中显示该字段的前5个结果(年龄)。它按预期显示,但我很难编写相应的日期。相反,我也想从数据库中查询日期并将其显示在图表上。
由于我想显示前5个结果,我将获得结果并首先对它们进行排序。我相信这会弄乱年龄段之后的日期位置。我试图使用字典来存储数据,但无法对其进行排序并获得密钥的前5个结果。我是否可以根据字典的键来获取一些帮助,并使用它来更新图表。或者有比使用字典更好的方法。
我在硬编码日期的工作代码:
//Query to dB and storing it in a list
PersonContext db = new PersonContext();
var xChartData = from x in db.Person
select x.Age;
List<double> topAge = new List<double>();
List<string> topFive = new List<string>();
foreach (var x in xChartData)
{
topAge.Add(x);
}
topAge.Sort();
for (int x = 1; x <= 5; x++)
{
topFive.Add(topAge.ElementAt(topAge.Count - x).ToString());
}
//Chart
var topAgefilePath = Server.MapPath("~/Chart_Files/topAge.jpg");
if (File.Exists(topAgefilePath))
{
File.Delete(topAgefilePath);
}
var myChart = new Chart(580, 400);
myChart.AddTitle("Top Age");
myChart.AddSeries(
chartType: "column",
xValue: new[] { "Date 1", "Date 2", "Date 3", "Date 4", "Date 5" },
yValues: topFive
);
myChart.Save(topAgefilePath);
尝试查询日期和年龄,并使用字典和排序进行存储。
var xChartData = from x in db.Person
select new { x.Age, x.Date };
Dictionary<double, DateTime> topAgeDict = new Dictionary<double, DateTime>();
foreach (var x in xChartData)
{
topAgeDict.Add(x.Age, x.Date);
}
答案 0 :(得分:1)
SortedDictionary<double, DateTime>
表示按键排序的键/值对的集合,在您的情况下看起来是Age
,这是double
因此可比较:< / p>
var topAgeDict = new SortedDictionary<double, DateTime>();
您可以使用此代替Dictionary<double, DateTime>
。
<强>更新强>
顺便说一句,用浮点数键入字典是危险的,因为看似无害的操作如
会导致微小的精度损失,从而导致查找失败。有关详情,请参阅Best collection to use with type Double as key。