2015-11-14 35 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