在运行时决定的<u>类型的成员上对List <t>进行排序</u> </t>

时间:2014-07-26 19:04:48

标签: c# asp.net sorting generics

我有一个Customer类型

Class Customer
{
    string Name;
    Address address;
    ...
}

类地址为

Class Address  
{  
    string Street;  
    int House;  
    ....  
}

我正在创建一个Customer列表

List<Customer> CustSource= new List<Customer>();

然后我将CustSource绑定到转发器。     Repeater有一个名为'Street'的列与CustSource.address.Street绑定,'House Number'与CustSource.address.HouseNum绑定,'Name'绑定CustSource.Name,依此类推。     我想在运行时决定的字段上对绑定源进行排序,即CustSource。我知道当我知道在编译时要对哪个字段进行排序时,它可以作为CustSource.OrderBy(x=>x.Name)来完成,但是为了在运行时决定字段并进行排序,在this文章的帮助下编写了一个扩展方法。

问题是,当我对Customer类的原始属性(如'Name')进行排序时,它工作正常,但我如何对CustSource的Address.Street属性进行排序?

1 个答案:

答案 0 :(得分:0)

an answer to this question的帮助下,我能够解决查询问题(我在问题中也链接到了这个SO帖子,但是没有耐心等待所有答案,我的不好)。<登记/> 引用发布此答案的人,我所需要的只是 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); } }

看起来像写儿童属性&#39;在我的问题中可以很容易回答。