最後に、一般的なソーターを実装し、それを拡張メソッドとして作成して、List を使用する場所ならどこでも使用できるようにしました。以下は私の実装です。sortorder は Asc/Desc であり、propertyname はタイプ T のプロパティの名前です。これはうまく機能し、これに満足しています。
public static List<T> SortedListWithLamda<T>(this List<T> list, string sortorder, string propertyname)
{
List<T> sortedlist = new List<T>();
if (!string.IsNullOrEmpty(propertyname) && list != null && list.Count > 0)
{
Type t = list[0].GetType();
if (sortorder == "A")
{
sortedlist = list.OrderBy(
a => t.InvokeMember(
propertyname
, BindingFlags.GetProperty
, null
, a
, null
)
).ToList();
}
else
{
sortedlist = list.OrderByDescending(
a => t.InvokeMember(
propertyname
, BindingFlags.GetProperty
, null
, a
, null
)
).ToList();
}
}
return sortedlist;
}