【问题标题】:Linq to XML if/foreach with XElement使用 XElement 的 Linq to XML if/foreach
【发布时间】:2011-03-24 18:01:55
【问题描述】:

似乎我在使用 Linq to XML 时遇到了一些问题,我已经寻找教程,但没有真正告诉我关于 from、select、语句的信息。我想知道如何用 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)),
                            }

【问题讨论】:

  • 您发布的代码毫无意义,而且您并没有真正解释您想要做什么或通过 foreach/if 语句表示什么。您当然可以使用 foreach 遍历一个集合,然后使用 if 语句在循环内做一些有条件的事情。不过,这与 LINQ 没有太大关系。
  • 下次我会尽量讲清楚,虽然其他人似乎都理解了,因为每个答案都帮助了我。

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


【解决方案1】:

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

【讨论】:

  • 谢谢,这与第一个答案的组合一起工作,谢谢!
【解决方案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));
}

【讨论】:

  • 感谢这项工作,但对于未来,我将在 Xdocument 中做更多的 foreach 类型循环......如果你有任何很棒的教程,因为我似乎找不到任何好的
【解决方案3】:
  1. 始终包含所有这些节点并不是一个坏主意,即使它们是空的也是如此

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

 

 //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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多