Linq 用變數方式讀取欄位

一般 Linq 寫法, 欄位只能寫死, 如:
qry = qry.OrderBy(p => p.CustomerID).ToList();

但是當GridView要做排序時, 要寫很多判斷句, 總覺得太死板了

if ( sortData == "CustomerID") {
    qry = qry.OrderBy(p => p.CustomerID).ToList();
} elseif (sortData == "BookName") {
    qry = qry.OrderBy(p => p.BookName).ToList();
}

上網查了一下, 改成下面寫法即可囉~

qry = qry.OrderBy(p => GetPropertyValue(p,sortData)).ToList();

private object GetPropertyValue(object obj, string property)
{
     System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property);
     return propertyInfo.GetValue(obj, null);
}

留言