您如何在 C# 和 LINQ 中使用在运行时为 List<dynamic> 定义的参数进行 OrderBy,其中每个动态都是一个 ExpandoObject

How do you OrderBy in C# and LINQ using a parameter defined in runtime for a List<dynamic> where each dynamic is an ExpandoObject

我有一个在 运行 时间生成并存储为 List<dynamic> 的数据,名为 "Reports"。

"Reports" 包含许多 "Report",它们也在 运行 时间作为新的 ExpandoObject().

生成

每个 "Report" 在 运行 被添加到 "Reports".

用户能够select他们想属性查看(预定义)。

我想使用 LINQ OrderBy 按用户定义 属性 排序 "Reports"。

您可以转换为 IDictionary<string, object> 并使用带有 属性 名称字符串的方括号索引器,例如

dynamic report1 = new ExpandoObject();
report1.Name = "Foo";
dynamic report2 = new ExpandoObject();
report2.Name = "Bar";

var reports = new[] { report1, report2 }.ToList();    

var sortBy = "Name";

var first = reports.OrderBy(x => ((IDictionary<string, object>)x)[sortBy]).First();

Console.WriteLine(first.Name); // Bar