使用Linq从平面列表创建嵌套列表

Ami*_*itd 2 c# linq asp.net

我有一个字符串列表

A01,B01 ,A02, B12, C15, A12,  ... 
Run Code Online (Sandbox Code Playgroud)

我想将列表放入列表列表或列表的列表中,以便
所有以相同字母开头的字符串组合在一起(使用linq)

A -> A01 , A02 , Al2
B -> B01 , B12
C -> C15
Run Code Online (Sandbox Code Playgroud)

要么

    A -> 01 , 02 , l2
    B -> 01 , 12
    C -> 15
Run Code Online (Sandbox Code Playgroud)

现在我只使用for循环迭代列表并将值添加到字典中的approp列表中.

(可能不对!)

   Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();

         foreach( string str in stringList)
         {
            string key = str.Substring(0,1);
            if (!dict.ContainsKey(key)){
                dict[key] = new List<string>();
            }

            dict[key].Add(str);
         }
Run Code Online (Sandbox Code Playgroud)

编辑:
哦对不起,我忘了添加这个,我有一个类别objs列表,这些是类别名称.
我需要检索类似的东西Dictionary<string, List<Category>>,我希望将它绑定到嵌套列表.(asp.net/ mvc)

使用Linq有更好的方法吗?

Jon*_*eet 5

听起来你想要一个Lookup,通过ToLookup扩展方法:

var lookup = stringList.ToLookup(x => x.Substring(0, 1));
Run Code Online (Sandbox Code Playgroud)

查找将让您可以使用字典执行任何操作,但在构建之后它是不可变的.哦,如果你要求丢失钥匙,它会给你一个空序列而不是错误,这可能非常有用.