Я хочу добавить функциональность для сортировки данных, получая строку столбца сортировки из внешнего интерфейса Angular.Ниже следует короткий сценарий.
Модель базы данных 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;
}
Но как можно сортировать подругой элемент объекта, например, objectCName , достигается путем получения только плоского строкового значения (которое фактически является элементом ObjectA.ObjectB.ObjectC.Name )?