2014-10-06 98 views
1

使用LINQ,如何将此列表结果分组为firstThree?我的组方法不起作用。LINQ - GROUP BY IEnumerable

var findOtherZipCodes = (from z in zipCodes          
           from results in zipFirstThree 
           where (results.region.ToUpper() == z.City 
           && results.state == z.State) 
           select new ZipCodeFirstThree 
           { 
            region = z.City, 
            state = z.State, 
            firstThree = z.ZipCode1.ToString().Substring(0, 3), 
            zipCode = z.ZipCode1.ToString() 
           }).ToList(); 

    findOtherZipCodes.GroupBy(x => x.firstThree).ToList(); 

     foreach (var item in findOtherZipCodes) { 
      Console.WriteLine(item.region + " " + item.firstThree + " " + item.zipCode); 
      Thread.Sleep(500); 


     } 
+2

的呼叫都为'ToList'在你的代码完成什么。您根本不需要使用该方法来执行此查询。 – Servy 2014-10-06 19:48:45

回答

2

您的GroupBy不工作的原因是您忽略了其结果。它应该是这样的:

var groups = findOtherZipCodes.GroupBy(x => x.firstThree).ToList(); 

更改foreach循环这样完成修复:

foreach (var group in groups) { 
    var firstInGroup = group.First();  
    Console.WriteLine(firstInGroup.region + " " + group.Key + " " + firstInGroup.zipCode); 
    Thread.Sleep(500); 
} 
+0

您的解决方案帮助我完成了所需的分组,非常感谢您的先生。 – user2751629 2014-10-07 12:55:12