if if条件在LINQ to XML查询中的c#

时间:2010-08-12 06:33:19

标签: linq

这是xml让我们说: <.Sections> <.SECTION ID ="4" NAME="GetStudents" CONTROL-TYPE="Button" LINK="WebForm2.aspx">

      </SECTION>
      <.SECTION ID="5" NAME="SelectStudent" CONTROL-TYPE="Drowpdown" METHOD ="selectList_MethodName">

      </SECTION>

</SECTION> <.SECTION ID="5" NAME="SelectStudent" CONTROL-TYPE="Drowpdown" METHOD ="selectList_MethodName"> </SECTION>

观察这个xml,我基于“CONTROL-TYPE”属性生成UI控件。但是两个部分元素都有不同的属性。作为链接和方法。我想像这样查询,如果部分的CONTROL-TYPE ==“Button”然后得到LINK属性的值Else如果CONTROL-TYPE ==“Drowpdown”则得到METHOD属性的值Else If。

我正在尝试在c#+ ASP.net中编写代码。怎么实现这个?有没有办法获得这样的数据?

注意:请不要将标记内的点作为&lt; .SECTION&gt;。这是为了这个论坛页面的理解。

1 个答案:

答案 0 :(得分:3)

嗯,最简单的方法是显式的if / else:

string value;
string controlType = (string) element.Attribute("CONTROL-TYPE");
if (controlType == "Button")
{
    value = (string) element.Attribute("LINK");
}
else if (controlType == "Dropdown")
{
    value = (string) element.Attribute("METHOD");
}
else
{
    // What do you want to happen if it's neither of these?
}

...如果您对其他控件类型的简单默认值感到满意,请使用条件运算符:

string controlType = (string) element.Attribute("CONTROL-TYPE");
string value = controlType == "Button" ? (string) element.Attribute("LINK")
             : controlType == "Dropdown" ? (string) element.Attribute("METHOD")
             : "default value";

编辑:在查询表达式中,有两种合理的方法可以做到这一点。首先,您可以使用条件运算符和let子句来获取控件类型一次:

var query = 
     from element in elements
     let controlType = (string) element.Attribute("CONTROL-TYPE")
     select new {
         ID = (string) element.Attribute("ID"),
         XYZ = controlType == "Button" ? (string) element.Attribute("LINK")
             : controlType == "Dropdown" ? (string) element.Attribute("METHOD")
            : "default value"
     };

或者 - 最好是IMO - 将此逻辑放入方法中,然后从select子句中调用该方法:

var query = 
     from element in elements
     let controlType = (string) element.Attribute("CONTROL-TYPE")
     select new {
         ID = (string) element.Attribute("ID"),
         XYZ = GetXyz(element);
     };

...
private static void GetXyz(XElement element)
{
    ...
}