C# FirstOrDefault即使有值也返回Null

C# FirstOrDefault即使有值也返回Null,c#,entity-framework,C#,Entity Framework,正如你所看到的,我在下面给出的列表中有一个明确的匹配项。但是,firstordefault返回Null。我怎样才能解决这个问题 我有两个列表对象。旧动物和晚期动物。我需要在最新的动物名单中找到一个匹配的旧动物 我的代码如下: oldAnimal = [{"iden":1 , "gen": "aaa"},{"iden":2 , "gen": "bbb"},{"iden":3 , "gen": "ccc"},{"iden":4 , "gen": "aaxde"}] latestAnimal= [{

正如你所看到的,我在下面给出的列表中有一个明确的匹配项。但是,firstordefault返回Null。我怎样才能解决这个问题

我有两个列表对象。旧动物和晚期动物。我需要在最新的动物名单中找到一个匹配的旧动物

我的代码如下:

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
                            );

您的查询应如下所示:

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

它没有做你想做的事情,因为你只是在其中一个数组上迭代。您希望以某种方式迭代这两种方法

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

我假设您确实希望通过检查latestAnimal[0].iden==oldAnimal[0].iden来启动它


从您发布的代码中,我无法判断您是否要将latestAnimal[0]与oldAnimal[1]进行比较。如果你不喜欢,我建议做一个for循环。如果你这样做,可以使用嵌套for循环或latestAnimal.FirstOrDefaulta=>oldAnimal.Anyb=>etc

此外,只需解释你真正想要什么,而不仅仅是显示你的代码?这是C代码,我们可以像oldAnimal一样定义变量吗?@AnthonyPegram oldAnimal是一个数组,那么他如何编写oldAnimal.iden?@TanvirArjel,我同意,一开始我误读了。如前所述,他的第三句话毫无意义。我已经编辑了代码。我已经把动物的部分去掉了。这是一个复制粘贴错误。他们可能希望使用.Any而不是.All