2015-11-14 53 views
0

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

SortedDictionary<double, DateTime>表示钥匙上,而你的情况似乎排序的键/值对的集合是Age,这是一个double,因此可比性:

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

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

更新

顺便提及,键控一个字典,浮点数是危险的,因为表面上无害的操作,诸如

可能会导致极小的精度损失,从而导致查找失败,因为equality check失败。欲了解更多信息,请参阅Best collection to use with type Double as key

+0

@Trevor_zam - 已更新答案 – dbc

相关问题