Как отсортировать список по атрибутам дочерних объектов? - PullRequest
0 голосов
/ 06 февраля 2019

Мне интересно, может ли кто-нибудь объяснить метод сортировки списка объектов на основе атрибута дочернего объекта.Я работаю со следующей моделью:

public class Content
{
    public string Id { get; set; }
    public List<ContentAttribute> Attributes { get; set; }
}

public class ContentAttribute
{
    public string Value { get; set; }
    public string Id { get; set; }
    public string Name { get; set; }
}

Некоторые примеры данных:

[
    {
        "Id": "123",
        "Attributes": [
            {
                "Value": "abc",
                "Id": "1a",
                "Name": "name1"
            },
            {
                "Value": "ghi",
                "Id": "2b",
                "Name": "name2"
            }
        ]
    },
    {
        "Id": "456",
        "Attributes": [
            {
                "Value": "abc",
                "Id": "1a",
                "Name": "name2"
            },
            {
                "Value": "def",
                "Id": "2b",
                "Name": "name3"
            }
        ]
    },
    {
        "Id": "789",
        "Attributes": [
            {
                "Value": "abc",
                "Id": "1a",
                "Name": "name1"
            },
            {
                "Value": "def",
                "Id": "2b",
                "Name": "name2"
            }
        ]
    }
]

Как можно отсортировать объекты содержимого по Value определенного атрибута Name?Например, я хотел бы отсортировать вышеупомянутые данные по Value из 'name2', что означает, что результат будет

[
    {"Id" : "456"},
    {"Id" : "789"},
    {"Id" : "123"}
]

. Любая помощь очень ценится.(С использованием c #).

1 Ответ

0 голосов
/ 06 февраля 2019

Если Attributes всегда имеет элемент с именем name2, и вы хотите исключение, если его нет, то:

var sorted = contents.OrderBy(c => c.Attributes.First(a => a.Name == "name2").Value).ToList();

Или, если name2 может отсутствовать, и это не прерыватель сделкизатем используйте FirstOrDefault

var sorted = contents.OrderBy(c => c.Attributes.FirstOrDefault(a => a.Name == "name2")?.Value).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...