【问题标题】:XElement creation if the value is not Null如果值不是 Null,则创建 XElement
【发布时间】:2013-05-01 00:01:47
【问题描述】:

我正在尝试从列表创建 XML。我正在从列表中创建一个匿名类以形成 XML:

var xEle = new XElement("Employees",
                from emp in empList
                select new XElement("Employee",
                             new XElement("ID", emp.ID),
                               new XElement("FName", emp.FName),
                             new XElement("LName", emp.LName)
                      ));

如果Fname或Lname为空怎么办?

我还想仅当对象不为空时才动态添加元素。例如如果Fname 为null,我需要跳过创建Fname:

new XElement("ID", emp.ID),
new XElement("LName", emp.LName)

我该怎么做?

【问题讨论】:

  • 你没有显示任何匿名类。
  • xEle 只是一个查询

标签: c# linq


【解决方案1】:

您的代码实际上根本没有显示匿名类型 - 只是 XElement 创建。但是,您可以使用 LINQ to XML 在添加内容时忽略 null 值这一事实。所以你可以使用:

select new XElement("Employee",
                    new XElement("ID", emp.ID),
                    emp.FName == null ? null : new XElement("FName", emp.FName),
                    emp.LName == null ? null : new XElement("LName", emp.LName)
                   )

或者你可以在string上写一个扩展方法:

public static XElement ToXElement(this string content, XName name)
{
    return content == null ? null : new XElement(name, content);
}

然后调用它:

select new XElement("Employee",
                    emp.ID.ToXElement("ID"),
                    emp.FName.ToXElement("FName"),
                    emp.LName.ToXElement("LName"))

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2012-06-07
相关资源
最近更新 更多