我有2个列表,其中包含接近 500k + 个记录。 List <Animal> and List <Zoo>.
模型
动物
Id
BllodType
ZooId
动物园
Z_ID
ZooName
ZooAdress
我需要编写一个LINQ函数,它可以返回与Animals
(ZooId
)匹配的Z_Id
列表。
我试图做的事情:
List<Animal> matchingAni= allZooList.Any(x => allAnimalList.Contains(x));
它说
无法从动物转换为动物园。
注意:由于我在这些列表中有 500k + 条记录,因此我正在寻找一种优化的方法来在更短的时间内遍历这些列表。
答案 0 :(得分:-1)
由于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