C# 排序列表<;T>;关于类型为<;U>;在运行时决定

C# 排序列表<;T>;关于类型为<;U>;在运行时决定,c#,asp.net,sorting,generics,C#,Asp.net,Sorting,Generics,我有一个典型的客户 Class Customer { string Name; Address address; ... } List<Customer> CustSource= new List<Customer>(); 班级地址为 Class Address { string Street; int House; .... } 我正在创建一个客户列表作为 Class Customer {

我有一个典型的客户

Class Customer
{
    string Name;
    Address address;
    ...
}
List<Customer> CustSource= new List<Customer>();
班级地址为

Class Address  
{  
    string Street;  
    int House;  
    ....  
}
我正在创建一个客户列表作为

Class Customer
{
    string Name;
    Address address;
    ...
}
List<Customer> CustSource= new List<Customer>();
List CustSource=new List();
然后我将CustSource绑定到一个中继器。 中继器有一个名为“Street”的列,与CustSource.address.Street绑定,“House Number”与CustSource.address.HouseNum绑定,“Name”与CustSource.Name绑定,依此类推。 我想对绑定源(即CustSource)进行排序,该绑定源位于运行时确定的字段上。我知道它可以作为
CustSource.OrderBy(x=>x.Name)
来完成,当我知道在编译时对哪个字段进行排序时,但为了在运行时决定该字段并进行排序,我在本文的帮助下编写了一个扩展方法

问题是,当我在Customer类的基本属性(如“Name”)上对其排序时,它可以正常工作,但如何在CustomSource的Address.Street属性上进行排序?

在的帮助下,我能够解决查询(我的问题中也链接到了这篇SO帖子,但我没有耐心仔细阅读所有答案,我的错)。
引用发布此答案的人的话,我只需要
if(propertyName.Contains('.'))
{
//支持按子字段排序。
字符串[]childProperties=propertyName.Split('.');
property=typeof(tenty).GetProperty(childProperties[0]);
propertyAccess=Expression.MakeMemberAccess(参数,属性);
for(int i=1;i


看来在我的问题中写“子属性”会让答案更容易

你应该重写标题。这与
列表
无关。您是否在asp.net上下文中?如果是,请添加相应的标签!如果不是在运行时,你还能对列表进行排序吗?!我认为在运行时,他的意思是通过用户点击列标题(某种使用动态或反射的方式)进行编程排序;但是要处理的列太多了。我说的对吗?将标识符绑定到头以知道在回发时排序是半动态的。将整个反射路径添加到gui(并将其设置为所有层)将是。。。太多;)