【问题标题】:LINQ: get 'Use the new keyword to create an object instance' when more than one records are returnedLINQ:返回多个记录时获取“使用新关键字创建对象实例”
【发布时间】:2011-03-27 00:51:59
【问题描述】:

...LINQ 新手,需要一些帮助。

我正在查询一些远程 xml 并使用 LINQ 将结果放入列表中。当 xml 查询只返回 1 条记录时,一切都很好,我通过访问列表中的 [0] 项获得了一个完全填充的“GetMPResult”对象。

...但是,如果 xml 中返回的记录超过 1 条,我会得到“使用新关键字创建对象实例”

有什么想法吗?

XDocument myData = XDocument.Parse(e.Result);
        List<GetMPResult> mp = (from mpItem in myData.Descendants("twfy")
              select new GetMPResult
            { 
                Member_id = mpItem.Element("member_id").Value,
                House = mpItem.Element("house").Value,
                First_name = mpItem.Element("first_name").Value,
                Last_name = mpItem.Element("last_name").Value,
                Constituency = mpItem.Element("constituency").Value,
                Party = mpItem.Element("party").Value,
                Entered_house = mpItem.Element("entered_house").Value,
                Entered_reason = mpItem.Element("entered_reason").Value,
                Left_house = mpItem.Element("left_house").Value,
                Left_reason = mpItem.Element("left_reason").Value,
                Person_id = mpItem.Element("person_id").Value,
                Title = mpItem.Element("title").Value,
                Lastupdate = mpItem.Element("lastupdate").Value,
                Full_name = mpItem.Element("full_name").Value,
                Url = mpItem.Element("url").Value,
                Image = mpItem.Element("image").Value,
                Image_height = mpItem.Element("image_height").Value,
                Image_width = mpItem.Element("image_width").Value,
            }).ToList<GetMPResult>();
        GetMPCompleteEvent(mp[0]);

【问题讨论】:

  • GetMPCompleteEvent() 方法的签名是什么?
  • ..它的选择错误所以没有走那么远

标签: .net linq


【解决方案1】:

这看起来与对象的数量无关,因为这是来自NullReferenceException 的错误消息。

我认为您正在处理的元素中存在一些即使您期望它也不存在的元素,因此您得到了 null 引用。

尝试注释掉所有初始化列表 (select new GetMPResult) 中的属性设置器——如果没有抛出,则表示您发现了问题。

【讨论】:

  • 刚刚尝试将它们注释掉...如果我将它们全部注释掉,我不会收到任何错误/没有数据。如果我取消注释任何项目(记得从末尾删除逗号),我会再次收到错误。
  • @AlanBeech:那么你应该在你的 XML 中寻找一个空的&lt;twfy&gt;&lt;/twfy&gt;
  • 啊……知道了。当返回多个记录时,XML 在每个记录周围都有一个额外的级别“”。
  • 感谢您为我指明正确的方向...非常感谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
相关资源
最近更新 更多