我想通过从Angular前端获取sort列的字符串来添加对数据进行排序的功能。这是一个简短的场景。
ObjectA的数据库模型:Entity,IAggregateRoot 。 ObjectA 具有简单的元素,例如 Id 和 Name ,但还具有一个额外的对象 ObjectB 。 ObjectB 具有简单的元素,例如 Id 和 Name ,但还具有一个额外的对象 ObjectC ,该对象仅具有简单的对象 Id 和名称。
ObjectA: {
Id: Guid,
Name: String,
ObjectB: {
Id: Guid,
Name: String,
ObjectC: {
Id: Guid,
Name: String,
}
}
}
为前端提供的模型仅使用重要元素进行了扁平化处理:
ObjectA: {
Id: Guid,
Name: String,
ObjectBName: String,
ObjectCName: String
}
现在,显示 ObjectA 的列表,我想在上面添加排序。我从前端接收元素名称(字符串)进行排序,例如 id 。这种排序很容易在后端通过Linq查询完成,例如:
return objectAList.OrderBy(x => GetPropertyToSort(x, orderByString));
使用函数 GetPropertyToSort():
private string GetPropertyToSort(object obj, string orderBy)
{
var prop = obj.GetType().GetProperty(char.ToUpper(orderBy[0]) + orderBy.Substring(1));
var propValue = prop.GetValue(obj)?.ToString();
return propValue;
}
但是如何按另一个对象元素进行排序,例如通过仅接收扁平化的字符串值(实际上是元素 ObjectA.ObjectB.ObjectC.Name )来实现 objectCName ?