我有一个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属性进行排序?
答案 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;在我的问题中可以很容易回答。