GroupBy .Key打印文字索引

时间:2016-06-07 12:03:44

标签: c# list group-by

我按照strings

的另一个列表的顺序对strings的列表进行排序
List<string> lstCategories = new List<string>() { "string1", "string2", "string3"};

var groups = lstActivity.OrderBy(x => x.codeAC.Text).ThenBy(x => x.text).GroupBy(x => lstCategories.IndexOf(x.codeAC.Text));

foreach(var group in groups)
{
    var slg = new SelectListGroup() { Name = group.Key.ToString() }; //problem is here

    foreach(codeAC activity in group)
    {
        SelectListItem item = new SelectListItem() { Text = activity.text, Value = activity.ID.ToString(), Group = slg };
        lstAssignments.Add(item);
    }
}

这个输出是:

- 2          // I need this to be the text & not the index position
    * text1
    * text2
- 1
    * text3
    * text4
- 3
    * text5
    * text6
// so on and so on

是列表lstCategories的文字索引位置 ..如何将其添加到选择文本并将其用作组而不是索引位置?

谢谢。

1 个答案:

答案 0 :(得分:1)

您正在将分组与订购混合。分组后,您可以根据需要订购组和组元素。在您的示例中,不仅组密钥不是您想要的,而且结果也不是有序的(2,1,3)。

以下是执行您想要的查询:

var groups = lstActivity.OrderBy(x => x.codeAC.Text).ThenBy(x => x.text)
    .GroupBy(x => x.codeAC.Text)
    .OrderBy(g => lstCategories.IndexOf(g.Key));

当然只使用

var slg = new SelectListGroup() { Name = group.Key };