用一个cars.GroupBy(o=>Name) 不就可以得到同样的么。。如果非要Dictionary
那只能Foreach了。

解决方案 »

  1.   

    List<Car> cars = new List<Car>();
    cars.Add(new Car() { ID = 1, Name = "红旗", OtherName = "hq1" });
    cars.Add(new Car() { ID = 2, Name = "奔驰", OtherName = "bc1" });
    cars.Add(new Car() { ID = 3, Name = "宝马", OtherName = "bm1" });
    cars.Add(new Car() { ID = 4, Name = "奔驰", OtherName = "bc2" });
    cars.Add(new Car() { ID = 5, Name = "宝马", OtherName = "bm2" });
    var carDict = cars.GroupBy(x => x.Name).ToDictionary(x => x.First().Name, y =>
    {
    List<Car> tempList = new List<Car>();
    tempList.AddRange(y);
    return tempList;
    }); //以下是输出:
    foreach (KeyValuePair<string, List<Car>> pair in carDict)
    {
    Console.WriteLine(pair.Key);
    pair.Value.ForEach(x => Console.WriteLine(@"ID={0}, Name='{1}',OtherName='{2}'", x.ID, x.Name, x.OtherName));
    Console.WriteLine();
    }
    输出结果:
    红旗
    ID=1, Name='红旗',OtherName='hq1'奔驰
    ID=2, Name='奔驰',OtherName='bc1'
    ID=4, Name='奔驰',OtherName='bc2'宝马
    ID=3, Name='宝马',OtherName='bm1'
    ID=5, Name='宝马',OtherName='bm2'

      

  2.   

    还可以简化一点:
    List<Car> cars = new List<Car>();
    cars.Add(new Car() { ID = 1, Name = "红旗", OtherName = "hq1" });
    cars.Add(new Car() { ID = 2, Name = "奔驰", OtherName = "bc1" });
    cars.Add(new Car() { ID = 3, Name = "宝马", OtherName = "bm1" });
    cars.Add(new Car() { ID = 4, Name = "奔驰", OtherName = "bc2" });
    cars.Add(new Car() { ID = 5, Name = "宝马", OtherName = "bm2" });
    var carDict = cars.GroupBy(x => x.Name).ToDictionary(x => x.First().Name, y => new List<Car>(y)); //以下是输出:
    foreach (KeyValuePair<string, List<Car>> pair in carDict)
    {
    Console.WriteLine(pair.Key);
    pair.Value.ForEach(x => Console.WriteLine(@"ID={0}, Name='{1}',OtherName='{2}'", x.ID, x.Name, x.OtherName));
    Console.WriteLine();
    }
      

  3.   


     var carDict = cars.GroupBy(o => o.Name).ToDictionary(a => a.First().Name, y => y.ToList());再简化
      

  4.   

    实际上核心的代码就一句,o(∩_∩)o...哈哈!!!
    var carDict = cars.GroupBy(x => x.Name).ToDictionary(x => x.First().Name, y => new List<Car>(y));
      

  5.   

    对,直接ToList就可以了,一下忘了。
      

  6.   

    var carDict = cars.GroupBy(x => x.Name).ToDictionary(x => x.Key, x => x.ToList());