Сравнить 2 списка с помощью LINQ - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть 2 списка, которые содержат около 1001 * 500k + записей. List <Animal> and List <Zoo>.

Модель

Animal

Id
BllodType
ZooId

Зоопарк

Z_ID
ZooName
ZooAdress

Мне нужно написать функцию LINQ, в которой она могла бы вернуть список Animals, который соответствует ZooId (Z_Id).

Что я пытался сделать:

List<Animal> matchingAni= allZooList.Any(x => allAnimalList.Contains(x));

Там написано

Невозможно преобразовать животное в зоопарк.

Примечание. Поскольку в этих списках у меня есть записи 500k + , я ищу оптимизированный способ обхода этого списка за меньшее время.

1 Ответ

0 голосов
/ 24 апреля 2019

Вы получаете эту ошибку, потому что allAnimalList - это список Animal, а x (в селекторе LINQ) имеет тип Zoo. Поэтому, когда вы делаете allAnimalList.Contains(x), вы пытаетесь увидеть, содержит ли список Animal Zoo, который выдает ошибку: Cannot convert from Animal to Zoo.

Попробуйте это:

// Use a hashset to make .Contains() an O(1) operation
var zooIDs = new HashSet<int>(from zoo in allZooList select zoo.Z_ID);
List<Animal> matchingAnimal = allAnimalList.Where(animal => zooIDs.Contains(animal.ZooID)).ToList();

Чтобы использовать LINQ JOIN:

var matchingAnimal = from animal in allAnimalList 
                     join zoo in allZooList 
                     on animal.ZooID equals zoo.Z_ID
                     select animal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...