Сортировать по свойствам во вложенном списке c # - PullRequest
0 голосов
/ 30 августа 2018

У меня есть список, который я хотел бы отсортировать по свойству внутри вложенного списка. Если значение свойства существует внутри одного из объектов, я бы хотел, чтобы оно было первым в списке. В противном случае, если свойство не существует, отсортировать его по свойству в родительском объекте.

Код:

Вот класс высшего уровня;

Я бы хотел отсортировать по определенному TagId . Затем NoteId в порядке возрастания.

  public class NoteDto
{
    string NoteText { get; set; }

    public int NoteId { get; set; }

    public List<TagDto> Tags { get; set; }

}

Класс вложенных объектов:

 public class TagDto
 {
    public int TagId { get; set; }

    public string Name { get; set; }

  }

Пример: если TagId равен 22, я бы хотел, чтобы он был первым в списке, в противном случае сортируйте по NoteId в порядке возрастания.

до сортировки

NoteText: "TestNote1",
NoteId: 1,
Tags: { TagId: 13, Name: "TestTag1" }, { TagId: 16, Name: "TestTag5" } 

NoteText: "TestNote2",
NoteId: 2,
Tags: { TagId: 14, Name: "TestTag2" }, { TagId: 17, Name: "TestTag6" }  

NoteText: "TestNote3",
NoteId: 3,
Tags: { TagId: 15, Name: "TestTag3" }, { TagId: 18, Name: "TestTag7" }

NoteText: "TestNote4",
NoteId: 4,
Tags: { TagId: 22, Name: "TestTag4" }, { TagId: 19, Name: "TestTag8" } 

После сортировки:

NoteText: "TestNote4",
NoteId: 4,
Tags: { TagId: 22, Name: "TestTag4" }, { TagId: 19, Name: "TestTag8" } 

NoteText: "TestNote1",
NoteId: 1,
Tags: { TagId: 13, Name: "TestTag1" }, { TagId: 16, Name: "TestTag5" } 

NoteText: "TestNote2",
NoteId: 2,
Tags: { TagId: 14, Name: "TestTag2" }, { TagId: 17, Name: "TestTag6" }  

NoteText: "TestNote3",
NoteId: 3,
Tags: { TagId: 15, Name: "TestTag3" }, { TagId: 18, Name: "TestTag7" }

1 Ответ

0 голосов
/ 30 августа 2018

Как насчет этого

var sorted = notes.OrderByDescending(note => note.Tags.Any(t => t.TagId == 22))
                     .ThenBy(note => note.noteId);

Инициирован приказ сначала разместить заметки с тэгом = 22, затем упорядочить по noteId

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...