Сохранение порядка в последовательности выбора (LINQ к XSD)

Учитывая следующий пример XML мы могли вообразить схему, определяющую Корень как содержащий последовательность несвязанного количества выбора между Type1 и Type2.

<Root>
    <Type1 />
    <Type2 />
    <Type2 />
    <Type1 />
</Root>

Я проверяю миграцию от инструмента XSD.exe, который, хотя добавляет, безопасность типов имеет много небольших раздражений. Инструмент XSD в этом случае просто создает в Корне массив системы типов. Объект и Вы должны выяснить, какие объекты (Type1 или Type2) там. Не абсолютно изящный, но по крайней мере Вы сохраняете порядок.

Проблема состоит в том, когда LINQ к XSD создает объекты, это определяет Корень как наличие двух независимых списков Type1 и Type2. Здорово в этом это безопасно с точки зрения типов, но я теперь, кажется, теряю порядок элементов. Я создал LINQ к XSD из источника на codeplex.

Используя LINQ к XSD, как я могу сохранить порядок этих элементов?

7
задан Andrew Garrison 4 November 2009 в 20:19
поделиться

1 ответ

Как насчет создания оболочки для Choice? Ограничение типов, к которым он обращается следующим образом:

class Choice
{
    private object _value;

    public ChoiceEnum CurrentType { get; private set; }

    public Type1 Type1Value
    {
        get { return (Type1) _value; }
        set { _value = value; CurrentType = ChoiceEnum.Type1; }
    }

    public Type2 Type2Value
    {
        get { return (Type2) _value; }
        set { _value = value; CurrentType = ChoiceEnum.Type2; }
    }
}

Это упрощенная версия, и вам придется добавить дополнительную проверку (если _value имеет правильный тип, каков текущий тип _value и т. Д.).

Затем вы можете отфильтровать его с помощью LINQ:

var q1 = from v in root.Sequence
         where v.CurrentType == ChoiceEnum.Type1
         select v.Type1;

Или вы можете создать методы в Root, которые будут заключать запросы.

2
ответ дан 7 December 2019 в 16:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: