排序List< T>类型的成员在运行时决定
本文关键字:成员 运行时 决定 类型 List 排序 | 更新日期: 2023-09-27 18:15:06
我有一个类型Customer
Class Customer
{
string Name;
Address address;
...
}
类地址为
Class Address
{
string Street;
int House;
....
}
我正在创建一个客户列表
List<Customer> CustSource= new List<Customer>();
然后我将CustSource绑定到一个中继器。中继器有一个名为'Street'的列与CustSource.address绑定。Street, 'House Number'与CustSource.address绑定。与CustSource绑定的'Name'。姓名等等。我想排序绑定源,即在运行时确定的字段上的CustSource。当我知道在编译时对哪个字段进行排序时,我知道它可以作为CustSource.OrderBy(x=>x.Name)
来完成,但是为了在运行时确定字段并进行排序,我在本文的帮助下编写了一个扩展方法。
问题是,当我对客户类的基本属性如'Name'进行排序时,它工作得很好,但我如何对地址进行排序。CustSource的街道属性?
在这个问题的答案的帮助下,我能够解决这个问题(我也在我的问题中链接到这个帖子,但是没有足够的耐心去浏览所有的答案,我的错)。
引用张贴这个答案的人的话,我所需要的只是if (propertyName.Contains('.'))
{
// support to be sorted on child fields.
String[] childProperties = propertyName.Split('.');
property = typeof(TEntity).GetProperty(childProperties[0]);
propertyAccess = Expression.MakeMemberAccess(parameter, property);
for (int i = 1; i < childProperties.Length; i++)
{
property = property.PropertyType.GetProperty(childProperties[i]);
propertyAccess = Expression.MakeMemberAccess(propertyAccess, property);
}
}
看起来在我的问题中写"Child Properties"会让它更容易回答。