2010-08-12 47 views
0

這是XML讓的說: <.Sections> <.SECTION ID ="4" NAME="GetStudents" CONTROL-TYPE="Button" LINK="WebForm2.aspx">如果LINQ其他條件XML查詢在C#

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

     </SECTION> 

觀察這個XML,我生成的「操作型」的UI控件基本屬性。但是這兩個部分都有不同的屬性。作爲LINK和METHOD。我想這樣查詢,如果部分的CONTROL-TYPE ==「Button」然後獲得LINK屬性的值Else如果CONTROL-TYPE ==「Drowpdown」,那麼獲取METHOD屬性的值Else If。

我想在C#+ ASP.net中編寫代碼。如何實現這一目標?有沒有辦法獲得這樣的數據?

注意:請不要將標籤內的點作爲< .SECTION>。這是爲了這個論壇頁面的理解。

回答

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" 
    }; 

- 和preferrably,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) 
{ 
    ... 
} 
+0

wo..wo ..這是我必須在Linq選擇寫?我認爲這是不支持聲明變量像字符串你在這裏做...請告訴我,我應該在哪裏寫這個邏輯? 讓說我AVE選擇爲: //代碼從模仿....東西從這裏開始... .. 選擇 新 { ID = mimic.Attribute( 「ID」), NAME =模仿.Attribute(「NAME」), CONTROLTYPE = mimic.Attribute(「CONTROL-TYPE」), //我想在這裏寫邏輯.....對於你的代碼的價值 – 2010-08-12 06:44:32

+0

@Lalit:這會有幫助如果你事先給出了上下文......將被編輯。 – 2010-08-12 07:01:11

+0

編輯的第一個代碼對我來說運行良好..... – 2010-08-12 09:14:59