LINQ 如何排序

lsfv00011 2011-10-14 11:07:58
p_Content.OrderBy(p=>p.cs_sc_createuser).ToArray();
這個是正常的。
如果我從外部得到要排序的字段名字如
string a="cs_sc_createuser";
p_Content.OrderBy(p=>XXXXX).ToArray();

XXXXX
這裡該怎麼寫啊。
...全文
112 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsfv00011 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sp1234 的回复:]

呵呵“单例字段”,这个代码里其实就是想说让PropertyInfo变量声明static的吧?!很多设计模式的名词是很雷人的,即使用了也要绕一大圈子让别人去争议。这就不如直截了当地使用.net的名词。

一般来说不要过度想到所谓的“万能”。最次地,为了性能考虑,你可以使用所谓的switch,比如说C# code
switch(s)
{
case "cs_sc_createuser":……
[/Quote]

對啊。好像只能從外部得到。我是做repeater的拍序,禁用了viewstate。linkbutton放在repeater外部。所以好像只能這樣了。
zhuzhenjesse 2011-10-14
  • 打赏
  • 举报
回复
p_Content.OrderBy(p => p.GetType().GetProperty(a).GetValue(p, null)).ToArray();
  • 打赏
  • 举报
回复
呵呵“单例字段”,这个代码里其实就是想说让PropertyInfo变量声明static的吧?!很多设计模式的名词是很雷人的,即使用了也要绕一大圈子让别人去争议。这就不如直截了当地使用.net的名词。

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


当然将差别封装到具体的类型实现中,可以增加灵活性。

其实最好办法还是回过头来从头开始考虑:你只能设计出“從外部得到要排序的字段名字”这样一种使用方式吗?
  • 打赏
  • 举报
回复
写成扩展方法,将PropertyInfo放在单例字段中就不用每次都反射一下
q107770540 2011-10-14
  • 打赏
  • 举报
回复
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

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧