Vol*_*rix 3 c# xml linq lambda
试图将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")
});
Run Code Online (Sandbox Code Playgroud)
foreach (Ping p in ping)
{
cmd.Parameters.AddWithValue("@TRAN_ID", p.TRAN_ID);
cmd.Parameters.AddWithValue("@MILOC", p.MILOC);
cmd.Parameters.AddWithValue("@SITE_REF", "");
}
Run Code Online (Sandbox Code Playgroud)
...添加参数以插入数据库时.我试过(和需要)的东西更多的是这个......
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", "");
Run Code Online (Sandbox Code Playgroud)
这听起来像所有你需要的是一个电话First()或Single()或什么-说你只想要一个结果(第一或唯一的结果-有其它选择):
Ping ping = xmlDoc.Descendants("PING_SEND").Select(...).First();
Run Code Online (Sandbox Code Playgroud)
基本上,问题是,经过Descendants(...).Select(...)你已经有了一个序列的Ping参考,而你只想要一个.
如果实际上可能存在多个PING_SEND元素 - 或者没有 - 您真的需要考虑在这种情况下您想要做什么.LINQ提供各种方法来帮助,具体取决于您的要求:
FirstSingleLastFirstOrDefaultSingleOrDefaultLastOrDefault这些OrDefault方法允许您处理没有结果的情况.
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |