2013-04-30 8 views
4

Я пытаюсь создать XML из списка. Я создаю класс Anonymous из списка для формирования XML:Создание XElement, если значение не Null

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 имеет нулевое значение, мне нужно, чтобы пропустить создание Fname:

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

Как я могу это сделать?

+3

Вы не показали каких-либо скрытых классов. –

+0

'xEle' - это всего лишь запрос в его нынешнем виде – DGibbs

+0

изменен Название .. – user2067567

ответ

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")) 
+0

AWSOME ... :) Спасибо @jon – user2067567

+0

Отличное решение моей проблемы, спасибо Jon! – delliottg

+0

Не вернусь к моему первоначальному комментарию достаточно быстро, чтобы добавить это: Пример того, как я использую это, см. Здесь в моем SO-вопросе: [Добавить столбцы в набор данных для использования в качестве родительских узлов XML] (http: //stackoverflow.com/questions/18220709/add-columns-to-dataset-to-be-used-as-xml-parent-nodes) – delliottg

Смежные вопросы