Sometimes I find myself using lists of ExpandoObjects to quickly create lists of dynamic objects. They are super fast to create, and so flexible. You may however want to sort the list using one of the dynamic fields you added. Below is an easy way I use:
yourlist.OrderBy(x => ((IDictionary<string, object>)x)[“yourfield”])
Below is a complete example, making use of a couple Windows versions for some fun sample data.
using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; namespace ExpandoObjectSort { internal class Program { private static void Main(string[] args) { IList<ExpandoObject> windows = new List<ExpandoObject>(); //add some data dynamic win31 = new ExpandoObject(); win31.codename = "Janus"; win31.windows = "Windows 3.1"; win31.released = new DateTime(1992, 4, 6); windows.Insert(windows.Count, win31); dynamic win95 = new ExpandoObject(); win95.codename = "Chicago"; win95.windows = "Windows 95"; win95.released = new DateTime(1995, 8, 24); windows.Insert(windows.Count, win95); dynamic winXP = new ExpandoObject(); winXP.codename = "Whisler"; winXP.windows = "Windows XP"; winXP.released = new DateTime(2001, 10, 25); windows.Insert(windows.Count, winXP); dynamic win8 = new ExpandoObject(); win8.codename = "Blue"; win8.windows = "Windows 8"; win8.released = new DateTime(2012, 10, 26); windows.Insert(windows.Count, win8); //loop through the list: Console.WriteLine("[default]"); foreach (dynamic win in windows) { Console.WriteLine(win.windows + " - Codename:" + win.codename + " - Released: " + ((DateTime)win.released).ToShortDateString()); } //sort via codename Console.WriteLine("[codename]"); foreach (dynamic win in windows.OrderBy(x => ((IDictionary<string, object>)x)["codename"])) { Console.WriteLine(win.windows + " - Codename:" + win.codename + " - Released: " + ((DateTime)win.released).ToShortDateString()); } //sort via date Console.WriteLine("[date desc]"); foreach (dynamic win in windows.OrderByDescending(x => ((IDictionary<string, object>)x)["released"])) { Console.WriteLine(win.windows + " - Codename:" + win.codename + " - Released: " + ((DateTime)win.released).ToShortDateString()); } Console.ReadLine(); } } }