Сортировать список объектов, содержащих другие объекты, по строке C # Linq - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу добавить функциональность для сортировки данных, получая строку столбца сортировки из внешнего интерфейса 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 )?

...