【问题标题】:My LINQ query is not ordering my dictionary我的 LINQ 查询没有订购我的字典
【发布时间】:2022-01-18 19:04:30
【问题描述】:

我有一本字典

Dictionary<string, List<Employee>> employees

包含员工列表。我想让用户根据他们所处的状态按字母顺序显示员工列表。

Console.WriteLine($"If you would like to sort this list please enter one of the following choices..\n" +
                    $"'STATE', 'INCOME', 'ID', 'NAME', 'TAX' other wise enter any key.");
var sort = Console.ReadLine().ToUpper();

var employees = EmployeeRecord.employees;
List<Employee> sortedEmps = new List<Employee>();

if (sort.Contains("STATE")) 
   foreach (var list in employees.Values) {
       var columnQuery = list.OrderBy(x => x.stateCode).ToList();
       sortedEmps.AddRange(columnQuery);
   }
    
    
}
//Print out the newly ordered list
foreach (Employee r in sortedEmps) {   
    Console.WriteLine($"ID: {r.iD} Name: {r.name} State: {r.stateCode} Income:{r.income} Tax Due: {r.taxDue}"); 
}

但是,它仍然会打印出列表而不进行排序。我怎样才能让它按州代码的字母顺序排列?

【问题讨论】:

  • 您似乎有一个列表列表。您正在对内部列表 (list) 进行排序,而不是外部列表 (employees)。
  • 改用 SelectMany 和 OrderBy。
  • @HansKilian 啊我现在看到了我的问题。谢谢你的解释。

标签: c# linq


【解决方案1】:

在所有数据合并后尝试排序。

if (sort.Contains("STATE")) {
   foreach (var list in employees.Values) {
       sortedEmps.AddRange(list);
   }
sortedEmps = sortedEmps.OrderBy(x => x.stateCode).ToList();
}

您还可以按照@Robert Harvey 的建议使用 SelectMany 缩短代码

if (sort.Contains("STATE")) {
    sortedEmps  = employees.Values              
                 .SelectMany(x => x)
                 .ToList().OrderBy(o => o.stateCode).ToList();
}

【讨论】:

猜你喜欢
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多