Как создать запрос LINQ to XML с условным выделением

#c# #xml #linq #conditional

#c# #xml #linq #условные операторы

Вопрос:

Элементы xml являются переменными в зависимости от некоторого условия. Мне нужно инициализировать экземпляр другим элементом, основанным на значении какого-либо другого элемента.

 var result = (from name in names
   select new MyName
   {
      name.First  = name.Type = Fracais ? name.PreNom : name.First,
      name.Last 
   }
  

Есть идеи?

Комментарии:

1. можете ли вы показать образец XML, который показывает проблему, с которой вы столкнулись?

2. Можете ли вы подробно описать, что именно вы хотите? Что не так с опубликованным вами кодом? (За исключением того факта, что это должно быть name.Type == Fracais .)

3. Если вы можете опубликовать другие связанные классы и константы / перечисления, мы можем предоставить более точный ответ, поскольку, похоже, у вас всего лишь несколько опечаток 🙂

4. но как это связано с XML?

Ответ №1:

То, что у вас есть, почти верно. Мне пришлось угадать перечисления и члены, поскольку вы не предоставляете другие классы:

    var result = from name in names
                 select new Person()
                   {
                      First = name.Type == PersonType.Fracais ? name.PreNom : name.First,
                      Last = name.Last
                   };
  

В запросе linq может быть практически любое выражение, включая вызовы функций, поэтому тестирование значений и изменение их на лету вполне приемлемо.

Комментарии:

1. 1: Небольшое объяснение проблемы повысило бы этот ответ.

2. Спасибо. Мне сказали, что это не сработало, и у меня не было достаточного скептицизма, поэтому я никогда не пробовал. пожалуйста, 1 килоПардон?

Ответ №2:

Как насчет этого? В качестве бессмысленной альтернативы.

 var result = names.where(name => name.Type == Francais).Select(name =>
                                           name.PreNom, name.Last).Union()
    names.where(name => name.Type != Francais).Select(name.First, name.Last);
  

Комментарии:

1. В оригинале ничего плохого (за исключением именования элементов и опечаток… и ==, насколько я могу видеть :)). Зачем усложнять чтение объединением?

2. Это большой обходной путь. Изменение = на == сработало бы так же хорошо 🙂