Как вы OrderBy в C# и LINQ, используя параметр, определенный во время выполнения для списка <dynamic>, где каждый Dynami c является ExpandoObject - PullRequest
0 голосов
/ 02 мая 2020

У меня есть данные, которые генерируются во время выполнения и хранятся как List<dynamic>, называемые «Отчеты».

«Отчеты» содержат много «Отчетов», которые также создаются во время выполнения как новые ExpandoObject().

Каждому «отчету» присваиваются различные свойства (например, Report.Name, Report.Value, Report.Order и т. Д. c) во время выполнения перед добавлением в «Отчеты».

Пользователь может выбрать, какое свойство он хочет просмотреть (которые предварительно определены).

Я хочу использовать LINQ OrderBy для сортировки «Отчетов» по ​​определенному пользователем свойству.

1 Ответ

0 голосов
/ 02 мая 2020

Вы можете привести к 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
...