Как получить точный список соответствия на основе списка Int? - PullRequest
0 голосов
/ 08 февраля 2020

Я хочу получить Точный список соответствия объектов на основе списка int
У меня есть два списка, первый
List<int> list1 = new List<int>(){5,6}; - предположим, что это университетские идентификаторы
второй У меня есть список объектов, таких как
List<UniversityGroup> list2 = new List<UniversityGroup>();
new UniversityGroup ({UniversityGroupId = 1 ,UniversityId = 5 }); сопоставленные объекты o / p должны '1 '
new UniversityGroup ({UniversityGroupId = 1 ,UniversityId = 6 });
---------------------- -------------------------------------------------- ---------------------
new UniversityGroup ({UniversityGroupId = 2 ,UniversityId = 5 }); - игнорируется, поскольку содержит только '5'
---------- -------------------------------------------------- ---------------------------------
new UniversityGroup ({UniversityGroupId = 3 ,UniversityId = 2 }); - игнорируемые элементы не совпадают
new UniversityGroup ({UniversityGroupId = 3 ,UniversityId = 3 });

И требуемый вывод в виде universityGroupId Где идентификаторы из списка1 будут совпадать с Идентификатор университета из списка2 ,

Ожидаемый вывод :=> [1] или
new UniversityGroup ({UniversityGroupId = 1 ,UniversityId = 5 });
new UniversityGroup ({UniversityGroupId = 1 ,UniversityId = 6 });

Я пытался использовать foreach, но я не думаю, что это оптимизированное решение, поэтому ищу сокращенный или оптимизированный запрос linq .

1 Ответ

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

если я правильно понимаю вашу проблему, вы можете использовать SequenceEqual в своем запросе:

    var list1 = new List<int> { 5, 6 };
    var list2 = new List<UniversityGroup> {
        new UniversityGroup{ UniversityGroupId = 1 ,UniversityId = 6 },
        new UniversityGroup{ UniversityGroupId = 1, UniversityId = 5 },
        new UniversityGroup{ UniversityGroupId = 2, UniversityId = 5 },
        new UniversityGroup{ UniversityGroupId = 3, UniversityId = 2 },
        new UniversityGroup{ UniversityGroupId = 3, UniversityId = 3 }
    };
    list1.Sort(); // depending on your input data you might want to apply some ordering so you could match sequences 6,5 to 5,6
    var result = list2.GroupBy(g => g.UniversityGroupId)
                    .Where(g => g.Select(i => i.UniversityId)
                                .OrderBy(x => x) // this might be optional if you can guarantee source sequence order
                                .SequenceEqual(list1)) // here's the thing
                    //.Select(g => g.Key) // if you want just UniversityGroupId
                 ;

Однако трудно сказать, является ли этот запрос будет лучше, чем ваша пара foreach петель, не видя их.

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