日期:2014-05-20  浏览次数:20742 次

LINQ 如何排序
p_Content.OrderBy(p=>p.cs_sc_createuser).ToArray();
這個是正常的。
如果我從外部得到要排序的字段名字如
string a="cs_sc_createuser";
p_Content.OrderBy(p=>XXXXX).ToArray();

XXXXX
這裡該怎麼寫啊。

------解决方案--------------------
p_Content.OrderBy(p => p.GetType().GetProperty(a).GetValue(p, null)).ToArray();
------解决方案--------------------
string a="cs_sc_createuser";
var query=p_Content.OrderBy(p=>GetPropertyValue(p,a)).ToArray();

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



http://blog.csdn.net/q107770540/article/details/6133484
------解决方案--------------------
写成扩展方法,将PropertyInfo放在单例字段中就不用每次都反射一下
------解决方案--------------------
呵呵“单例字段”,这个代码里其实就是想说让PropertyInfo变量声明static的吧?!很多设计模式的名词是很雷人的,即使用了也要绕一大圈子让别人去争议。这就不如直截了当地使用.net的名词。

一般来说不要过度想到所谓的“万能”。最次地,为了性能考虑,你可以使用所谓的switch,比如说
C# code
switch(s)
{
    case "cs_sc_createuser":
       query= query.OrderBy(p=>p.cs_sc_createuser);
       break;
    case .......
}
query= query.ToArray();