我的 LINQ 查询没有订购我的字典

Posted

技术标签:

【中文标题】我的 LINQ 查询没有订购我的字典【英文标题】:My LINQ query is not ordering my dictionary 【发布时间】: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 啊我现在看到了我的问题。谢谢你的解释。 【参考方案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();

【讨论】:

您可以使用SelectMany 来展平列表。

以上是关于我的 LINQ 查询没有订购我的字典的主要内容,如果未能解决你的问题,请参考以下文章

优化 LINQ 查询所需的帮助

LINQ to SQL:对来自订购系统的多个表的报告的聚合数据进行复杂查询

LINQ 左外连接查询错误:OuterApply 没有适当的键

如何让LINQ根据文化订购?

存储过程的 Linq2SQL 中没有返回类型

计数错误但我在LINQ表达式中没有使用Count,