【问题标题】:Convert xml to custom class using lambda linq使用 lambda linq 将 xml 转换为自定义类
【发布时间】:2014-11-04 17:02:52
【问题描述】:

尝试将 xml 文档解析为我创建的自定义类。我已经成功地弄清楚了如何解析文档,但由于某种原因,我不得不将其转换为 IEnumerable 而不仅仅是我的自定义类的单个实例。仅显示代码比深入解释容易得多,因此请参阅下面的代码 sn-ps。

工作代码

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

【问题讨论】:

    标签: c# xml linq lambda


    【解决方案1】:

    听起来你只需要调用First()Single() 或其他任何东西 - 说你只想要 一个 结果(第一个或唯一的结果 - 其他选项可用) :

    Ping ping = xmlDoc.Descendants("PING_SEND").Select(...).First();
    

    基本上,问题是在Descendants(...).Select(...) 之后,您有一个序列Ping 引用,而您只需要一个。

    如果实际上可能有多个 PING_SEND 元素 - 或者没有 - 你真的需要考虑在这种情况下你想做什么。根据您的要求,LINQ 提供了各种帮助方法:

    • First
    • Single
    • Last
    • FirstOrDefault
    • SingleOrDefault
    • LastOrDefault

    OrDefault 方法允许您处理没有结果的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多