我的 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 to SQL:对来自订购系统的多个表的报告的聚合数据进行复杂查询