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

时间:2015-11-14 00:54:04

标签: c# linq dictionary

我正在查询我的数据库,以便在图表中显示该字段的前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);
}

1 个答案:

答案 0 :(得分:1)

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

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

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

<强>更新

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

由于equality check失败,

会导致微小的精度损失,从而导致查找失败。有关详情,请参阅Best collection to use with type Double as key