您如何使用在运行时为List定义的参数在C#和LINQ中进行排序 其中每个动态都是ExpandoObject

问题描述 投票:0回答:1

我有一个在运行时生成的数据,并存储为List<dynamic>,称为“报告”。

“报告”包含许多“报告”,它们也在运行时作为新的ExpandoObject().]生成>

每个“报表”在运行时被分配各种属性(例如Report.Name,Report.Value,Report.Order等),然后再添加到“ Reports”。

用户可以选择他们要查看的属性(哪些是预定义的。)>

我想使用LINQ OrderBy通过用户定义的属性对“报告”进行排序。

我有一个在运行时生成并存储为List 的数据,称为“ Reports”。 “报告”包含许多“报告”,它们也在运行时作为新的ExpandoObject()生成。每个“ ...

c# linq dynamic sql-order-by expandoobject
1个回答
0
投票

您可以转换为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
© www.soinside.com 2019 - 2024. All rights reserved.