Linq to XML if / foreach with XElement

时间:2010-08-03 13:49:27

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

似乎我在使用Linq to XML方面遇到了一些麻烦,我已经找了教程,但没有真正告诉我有关from,select,statements的内容。我想知道如何用linq做一个foreach / if语句,如果你有一个教程请告诉我。我现在的问题是,如果文本框中包含某些内容,我只希望将某个部分放入我的XML中。

代码显然不起作用,因为你不能把if语句放在我的XDocument中。任何帮助/解释都会很棒

if(txtPr3_Chain.Text != "")
                            {
                        new XElement("Property_Info",
                          new XAttribute("Chain", txtPr3_Chain.Text),  
                        new XElement("City" ,txtPr3_City.Text ),
                        new XElement("AdRating" ,AdRating3.CurrentRating.ToString()),
                        new XElement("YourRating" ,YourRating3.CurrentRating.ToString() ),
                        new XElement("Comment" ,txtPr3_Comments.Text)),
                            }

3 个答案:

答案 0 :(得分:2)

当Text值不为空时,您是否只是尝试构造一个新的XElement

试试这个:

XElement element = null;
if (txtPr3_Chain.Text != "")
{
    element = new XElement("Property_Info",
                            new XAttribute("Chain", txtPr3_Chain.Text),
                            new XElement("City", txtPr3_City.Text),
                            new XElement("AdRating", AdRating3.CurrentRating.ToString()),
                            new XElement("YourRating", YourRating3.CurrentRating.ToString()),
                            new XElement("Comment", txtPr3_Comments.Text));
}

答案 1 :(得分:2)

为什么不创建包含始终存在的部分的XDocument,然后在其后插入/追加其他部分,您可以使用常规for或if

答案 2 :(得分:1)

  1. 总是包含所有这些节点并不是一个坏主意,即使它们是空的

  2. 如果你坚持,你可以写一个产生非空字段的枚举器方法:

  3.  //untested
    IEnumerable<Xelement> GetFields()
    {
        if (txtPr3_City.Text != null)
          yield return new Xelement("City",txtPr3_City.Text);
        ....    
    }
    
    
     element = new XElement("Property_Info",
                   new XAttribute("Chain", txtPr3_Chain.Text),
                   GetFields());