即使有值,FirstOrDefault也会返回Null

时间:2019-05-05 02:15:58

标签: c# entity-framework

如您所见,我在下面给出的列表中有明确的匹配项。但是,firstordefault返回Null。我该如何解决?

我有2个List对象。 OldAnimals和LatestAnimals。我需要在最新动物列表中找到oldAnimal的匹配项。

我的代码如下:

oldAnimal = [{"iden":1 , "gen": "aaa"},{"iden":2 , "gen": "bbb"},{"iden":3 , "gen": "ccc"},{"iden":4 , "gen": "aaxde"}]

latestAnimal= [{"iden":1 , "gen": "xxx"},{"iden":2 , "gen": "xddfddse"},{"iden":3 , "gen": "ccc"},{"iden":4 , "gen": "aaxde"}]

Animal ani= latestAnimal.FirstOrDefault(a=> a.iden == oldAnimal.iden &&
                            a.gen== oldAnimal.gen
                            );

2 个答案:

答案 0 :(得分:0)

您的查询应如下:

 var animals = latestAnimal.Where(l => oldAnimal.All(o => o.iden == a.iden && o.gen == a.gen)).ToArray();

答案 1 :(得分:0)

它没有执行您想要的操作,因为您仅在一个数组上进行迭代。您想以某种方式遍历两者。

您编写的代码会检查是否latestAnimal[0].iden == oldAnimal.iden,然后检查是否latestAnimal[1].iden == oldAnimal.iden,等等

我认为您实际上是想先检查latestAnimal[0].iden == oldAnimal[0].iden

根据您发布的代码,我无法确定您是否要将latestAnimal[0]oldAnimal[1]进行比较。如果您不这样做,我建议使用for循环。如果这样做,可以使用嵌套的for循环或latestAnimal.FirstOrDefault(a=> oldAnimal.Any(b =>