使用LINQ比较2列表

时间:2019-04-24 16:01:52

标签: c# entity-framework linq

我有2个列表,其中包含接近 500k + 个记录。 List <Animal> and List <Zoo>.

模型

动物

Id
BllodType
ZooId

动物园

Z_ID
ZooName
ZooAdress

我需要编写一个LINQ函数,它可以返回与AnimalsZooId)匹配的Z_Id列表。

我试图做的事情:

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

它说

  

无法从动物转换为动物园。

注意:由于我在这些列表中有 500k + 条记录,因此我正在寻找一种优化的方法来在更短的时间内遍历这些列表。

1 个答案:

答案 0 :(得分:-1)

由于allAnimalListAnimal的列表,而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