将数据库数据存储在字典中以显示在图表上

本文关键字:显示 字典 数据库 数据 存储 | 更新日期: 2023-09-27 18:21:49

我正在查询数据库,以在图表中显示该字段(年龄)的前5个结果。它按预期显示,但我正在硬编码相应的日期。相反,我也想从数据库中查询日期,并将其显示在图表上。

由于我想显示前5个结果,所以我首先获取结果并对其进行排序。我相信这会打乱年龄字段后面日期的位置。我试图使用Dictionary来存储数据,但无法对其进行排序并获得键的前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);
}

将数据库数据存储在字典中以显示在图表上

SortedDictionary<double, DateTime>表示按键排序的键/值对的集合,在您的情况下,它看起来是Age,是double,因此具有可比性:

var topAgeDict = new SortedDictionary<double, DateTime>();

您可以使用此来代替Dictionary<double, DateTime>

更新

顺便说一句,用浮点数字键入字典是危险的,因为等看似无害的操作

  • 往返两次往返
  • 除以然后乘以一个固定值
  • 甚至可以加减一个固定值

可能会导致微小的精度损失,从而导致由于相等性检查失败而导致的查找失败。有关详细信息,请参阅与Double类型一起用作键的最佳集合。