2010-08-12 6 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, я генерация базы управления пользовательского интерфейса на «CONTROL-TYPE» Атрибуты. но в обоих элементах разделов есть разные атрибуты. как LINK и МЕТОД. Я хочу запросить вот так, если в разделе CONTROL-TYPE раздела «Button» появится значение атрибута LINK Else If CONTROL-TYPE == «Drowpdown», тогда получите значение атрибута METHOD Else If.

Я пытаюсь написать код в C# + ASP.net. как добиться этого? есть ли способ получить такие данные?

ПРИМЕЧАНИЕ: пожалуйста, не входите в точку внутри тега как < .SECTION>. это для понимания этой страницы форума.

ответ

3

Ну, самый простой способ это либо явная, если/другое:

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

EDIT: В выражении запроса есть два разумных способа сделать это. Во-первых, вы можете использовать условный оператор и условие 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 - поставить эту логику в метод, а затем вызвать метод из выбранного пункта :

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 .. это я должен написать в Select Linq? Я думаю, что это не поддержка переменных декларации, таких как строка u здесь ... скажите, пожалуйста, где мне нужно написать эту логику? пусть говорят, я пр выбрать как: // код здесь началось ... от мимических в .... что-то .. выбрать новый { ID = mimic.Attribute ("ID"), NAME = мимических .Attribute («NAME»), CONTROLTYPE = mimic.Attribute («CONTROL-TYPE»), // Я хочу, чтобы здесь логика ..... для значения в соответствии с вашим кодом –

+0

@Lalit: Это помогло бы если вы заранее задали контекст ... отредактируйте. –

+0

Отредактированный первый код работает отлично для меня ..... –

Смежные вопросы