这是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;。这是为了这个论坛页面的理解。
答案 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)
{
...
}