【问题标题】:creating a "join" to update one XElement from another XElement创建“连接”以从另一个 XElement 更新一个 XElement
【发布时间】:2011-07-07 14:07:28
【问题描述】:

我有一个名为“XUsers”的 XElement,它将包含如下所示的 XML:

<users>
   <user id="12345" name="Bob Smith" />
   <user id="67890" name="Jamal Stevens" />
   <user id="54321" name="Mary Jones" />
</users>

...以及另一个名为“XTasks”的 XElement,它将包含如下数据:

<tasks>
   <task id="1" title="Task 1" ownerId="54321" />
   <task id="2" title="Task 2" ownerId="12345" />
   <task id="3" title="Task 3" ownerId="67890" />
</tasks>

我想为第二个 XElement (XTasks) 中的任务元素添加一个属性 (“ownerName”),并根据与第一个 XElement (XUsers) 的“连接”设置其值。所以,我的最终结果是 XTask 中的 XML 看起来像这样:

<tasks>
   <task id="1" title="Task 1" ownerId="54321" ownerName="Mary Jones" />
   <task id="2" title="Task 2" ownerId="12345" ownerName="Bob Smith" />
   <task id="3" title="Task 3" ownerId="67890" ownerName="Jamal Stevens" />
</tasks>

这可以使用 Linq 吗?我无法在网上找到任何此类操作的示例。在我的 ASP.NET(C#) 代码中完成此任务的最有效方法是什么?

感谢您提供的任何建议。

【问题讨论】:

    标签: c# asp.net linq-to-xml xelement


    【解决方案1】:

    我在没有任何 IDE 的情况下执行此操作,所以请原谅我的任何错误..

     foreach (XElement task in XTasks.Elements())
     {
         XElement userNode = XUsers.Elements().Where(
            e => e.Attribute("id").Value == task.Attribute("ownerId").Value).FirstOrDefault();
         if (userNode != null)
         {
            task.Attribute("ownerName").SetValue(userNode.name);
         }
     }
    

    【讨论】:

    • 非常感谢您的快速回答!我仍然不精通 Linq 语法,尤其是 lambda 表达式。我会将其插入我的代码并进行一些测试。之后我会将其标记为“答案”。谢谢,谢谢,谢谢!
    • 更新 - 这很好用,谢谢。在尝试设置其值之前,我刚刚添加了一条创建“ownerName”属性的行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2020-05-23
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多