Trying to understand LINQ
本问题已经有最佳答案,请猛点这里访问。
我有一个从数据库中获取数据的方法,我想返回一个单独的对象。
但是,以下代码将返回空值。
我已经核实了进来的数据包含1条记录。
如果我将返回类型从一个对象更改为一个对象列表,这个方法就可以工作。
我想知道为什么在这种情况下,为什么我不能只返回一个对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 | public PersonObj GetPersonInformation(string personName) { DataTable dt = _oracle.GetPersonInformation(personName); var aPerson = dt.AsEnumerable().Select(x => new PersonObj { FirstName = x.Field<string>("FIRST_NAME"), LastName = x.Field<string>("LAST_NAME"), PhoneNumber = x.Field<string>("PHONE_NUMBER") }).ToList().Take(1); return aPerson as PersonObj; } |
你的问题是因为
1 2 3 4 5 6 7 8 9 10 11 12 | public PersonObj GetPersonInformation(string personName, int take) { DataTable dt = _oracle.GetPersonInformation(personName); return dt.AsEnumerable().Select(x => new PersonObj { FirstName = x.Field<string>("FIRST_NAME"), LastName = x.Field<string>("LAST_NAME"), PhoneNumber = x.Field<string>("PHONE_NUMBER") }).ToList().Take(take); } |
你可以要求(并得到)一个,但你可以要求更多。这说明了出现错误的原因:
如果你只想要第一个,你可以打电话给
是否尝试使用FirstOrDefault()而不是Take(1)?这应该允许您指定只期望一个结果。我相信您对数据类型有问题的原因是tolist()和take()调用,它可以返回多个对象。
用