如果值不是Null,则创建XElement

时间:2013-04-30 07:29:39

标签: c# linq

我正在尝试从List创建XML。我从列表中创建一个Anonymous类来形成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)
                      ));

如果FnameLname为空,我该如何处理?

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

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

我该怎么做?

1 个答案:

答案 0 :(得分:11)

您的代码实际上并不显示匿名类型 - 仅创建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"))