尝试将xml文档解析为我创建的自定义类。我已经成功地弄清楚了如何解析文档,但由于某种原因,我不得不将其用于IEnumerable
而不是我的自定义类的单个实例。更容易展示代码而不是深入解释,所以请参阅下面的代码片段。
IEnumerable<Ping> ping = xmlDoc.Descendants("PING_SEND").Select(p => new Ping
{
TRAN_ID = (string)p.Element("TRAN_ID"),
MILOC = (string)p.Element("MILOC"),
TRANDATE = (string)p.Element("TRANDATE"),
TRANTIME = (string)p.Element("TRANTIME"),
COUNTRY = (string)p.Element("COUNTRY")
});
foreach (Ping p in ping)
{
cmd.Parameters.AddWithValue("@TRAN_ID", p.TRAN_ID);
cmd.Parameters.AddWithValue("@MILOC", p.MILOC);
cmd.Parameters.AddWithValue("@SITE_REF", "");
}
...添加参数以插入数据库时。我试过(和需要)的东西更多的是这个... ...
Ping ping =(Ping)xmlDoc.Descendants("PING_SEND").Select(p => new Ping
{
TRAN_ID = (string)p.Element("TRAN_ID"),
MILOC = (string)p.Element("MILOC"),
TRANDATE = (string)p.Element("TRANDATE"),
TRANTIME = (string)p.Element("TRANTIME"),
COUNTRY = (string)p.Element("COUNTRY")
});
//... Other operations and database functions...
cmd.Parameters.AddWithValue("@TRAN_ID", ping.TRAN_ID);
cmd.Parameters.AddWithValue("@MILOC", ping.MILOC);
cmd.Parameters.AddWithValue("@SITE_REF", "");
答案 0 :(得分:5)
听起来您需要的只是拨打First()
或Single()
或其他任何内容 - 说您只需要一个结果(第一个或唯一结果 - 其他选项可用):
Ping ping = xmlDoc.Descendants("PING_SEND").Select(...).First();
基本上,问题是在Descendants(...).Select(...)
之后你有Ping
引用的序列,而你只需要一个。
如果实际上可能有多个PING_SEND
元素 - 或者没有 - 你真的需要考虑在那种情况下你想做什么。 LINQ提供各种方法来帮助,具体取决于您的要求:
First
Single
Last
FirstOrDefault
SingleOrDefault
LastOrDefault
OrDefault
方法允许您处理没有结果的情况。