C# Получить элемент списка, где значение списка в списке совпадает - PullRequest
0 голосов
/ 05 февраля 2020

У меня проблема. В моем C# коде у меня есть List<Set> lstSets. Внутри набора у меня есть еще List<Picture> Pictures. Класс рисунка выглядит следующим образом:

public class Set
{
    public int Id { get; set; }
    public List<Picture> Pictures{ get; set; }
}

А класс рисунка выглядит следующим образом:

public class Picture
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Теперь у меня есть случайное изображение, где я знаю идентификатор и имя, но мне нужно чтобы получить Index изображения внутри списка Pictures, и мне нужно знать набор Id.

Я знаю код, как я могу получить что-то из одного списка:

myList.FindIndex(a => a.prop == prop);

Но это список в списке.

Итак, я хочу:

int SetId = ....
int PictureIndex = ....

Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 05 февраля 2020

Следующее выражение Linq возвращает Id из Set по изображению Id с использованием методов FirstOrDefault и Any. Если такого элемента нет, индекс устанавливается на 0 с использованием оператора объединения нулей ??

var setId = lstSets.FirstOrDefault(l => l.Pictures.Any(p => p.Id == pictureId))?.Id ?? 0;

Этот код может использоваться для получения индекса изображения внутри Pictures коллекция Set

var index = 0;
foreach (var set in lstSets.Where(set => set.Pictures.Any(p => p.Id == pictureId)))
{
    index = set.Pictures.FindIndex(p => p.Id == pictureId);
}

Попытка найти индекс изображения внутри каждого Set объекта. Существует также возможность просмотреть все Pictures всех Set элементов, используя SelectMany метод

0 голосов
/ 05 февраля 2020

Пожалуйста, попробуйте это;

int setId = -1;
var picIndex = -1;
foreach (var set in lstSets)
{
    picIndex = set.Pictures.FindIndex(p => p.Id == picToFind.Id && p.Name == picToFind.Name);
    if (picIndex > -1)
    {
        setId = set.Id;
        break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...