介绍
假设我有这些课程:
public class Door {
public string Label { get; set; }
}
public class House {
public string Address { get; set; }
public Door FrontDoor { get; set; }
}
现在,这些是数据库中的简单模型,使用 Entity Framework 4 进行抽象。因此,当我需要制作有序列表时,House
我可以使用:
dbObjectContext.Houses.OrderBy(h=>h.Name);
然后,如果我想按 订购FrontDoor.Label
,我可以使用:
dbObjectContext.Houses.OrderBy(h=>h.FrontDoor.Label);
问题
我打算制作一种旨在由 WPF DataGrid 使用的排序方法,该方法将显示房屋列表。方法签名如下:
IOrderedQueryable<TEntity> ApplySortingToQuery<TEntity>(bool ascending
,IQueryable<TEntity> finderQuery,string propertyPath)
我想使用对象类型和属性访问路径字符串的知识来构建OrderBy表达式。TEntity
propertyPath
在 DataGrid 中,要排序的对象是 type House
,它的列是Address和Front Door Label。现在,DataGrid 中的Address列已SortMemberPath
设置为Address
。而前门标签列是FrontDoor.Label
.
一开始,我可以只使用if-else
来确定要使用的OrderBy表达式,例如:
if (col.SortMemberPath=="Address") {
query=query.OrderBy(h=>h.Address);
} else if (col.SortMemberPath=="FrontDoor.Label") {
query=query.OrderBy(h=>h.FrontDoor.Label);
}
但是,恕我直言,此功能非常通用。因此,执行此操作的实用程序函数将SortMemberPath
像在该方法中一样咨询和使用它,propertyPath
这对于将使用它的许多其他应用程序来说将是一个很大的帮助。
我已经咨询过这种技术,它可以帮助我在一定程度上实现这个实用功能,但只有直接属性访问是成功的(即:)Address
,但访问子属性(即:)FrontDoor.Label
并不成功。
请指导我。