#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. Это большой обходной путь. Изменение
=
на==
сработало бы так же хорошо 🙂