根据List <string>的顺序对List <int>进行排序

时间:2016-03-11 13:48:04

标签: c# list sorting

我无法找到使其正常工作的方法。我有一个整数列表..这些整数是我的字符串列表中字符串的计数。

我正在使用MVC图表帮助器,我的问题是我的yValues没有与我的xValues正确对齐。

例如,我的List<string>包含以下值:"Beginner""MOTR""Advanced"。我使用此列表来订购下面的列表。

我的数据库包含大量记录,每条记录都是"Beginner""MOTR""Advanced"。所以我有一个foreach循环来收集每个级别的计数,所以它可以是动态的。但是当foreach循环执行时,它将Levels按字母顺序排列。

我还有一个名为Rank的类,它具有该级别的属性(用于部分视图目的)

这就是我所拥有的:

List<string>lstLevelsInOrder = new List<string> {"Beginner", "MOTR", "Advanced"};

List<int> emptyListIntegers = new List<int>();
List<string> lstLevels = database.testdb.Where(x => x.deleted == false).Select(x => x.Level).Distinct().ToList();

foreach(var item in lstLevels)
{
    Rank rank = new Rank();
    rank.level = item;
    emptyListIntegers.Add(database.testdb.Where(x => x.Level == rank.level && x.deleted == false).Count());
}

var key = new Chart(width: 800, height: 800, theme: ChartTheme.Blue)
    .SetXAxis()
    .SetYAxis()
    .AddTitle()
    .AddSeries(
    xValue: lstLevelsInOrder,
    yValues: emptyListIntegers
    );

return File(key.ToWebImage().GetBytes(), "image/jpeg");

所以只是说说法,让我们说初学者的数量是10,MOTR是20,高级是5。

当该foreach循环执行时,emptyListIntegers将被填充为5,10,20(由于字母顺序)

所以,当我看到我的图表时,x轴是&#34;初学者&#34; y值为5,&#34; MOTR&#34; y值为10,&#34;高级&#34; y值为20。

如何根据emptyListIntegers对<{1}}进行排序?

1 个答案:

答案 0 :(得分:5)

您必须通过其他列表中string的索引进行适当排序:

List<string> lstLevels = database.testdb
    .Where(x => ! x.deleted )
    .AsEnumerable()  // force Linq-To-Objects
    .OrderBy(x => lstLevelsInOrder.IndexOf(x.Level))
    .Select(x => x.Level)
    .Distinct()
    .ToList();