Linq2Xml — получение родительских элементов на основе значения их дочерних атрибутов

У меня есть простой xml:

<forms for="ApplicationTestSettings">
    <form name="Parameter12Settings" title="Parameter12 Settings" url="/Parameter12Settings">
        <roles>
            <role name="Parameter12-Reader" />
            <role name="Parameter12-Writer" can-add="1" can-edit="1" can-delete="0" />
        </roles>
    </form>
    <form name="Parameter34Settings" title="Parameter 34 Settings" url="/Parameter34Settings">
        <roles>
            <role name="Parameter34-Reader" />
            <role name="Parameter34-Writer" can-add="1" can-edit="1" can-delete="0" />
        </roles>
    </form>
</forms>

Мне нужна коллекция форм на основе значения атрибута элемента роли. У меня есть список:

List<string> roles = new List<string>();
roles.Add("Parameter12-Reader");
roles.Add("Parameter34-Writer");

Я пытаюсь получить элементы с помощью этого запроса:

var forms = root.Descendants("form")
                .Where(form => roles.Contains(form.Element("roles")
                                                  .Element("role")
                                                  .Attribute("name").Value)).ToList();

К сожалению, этот запрос анализирует только первую роль во всех блоках форм/ролей. Может ли кто-нибудь сказать мне, как мне определить этот запрос для получения всего элемента формы, где список ролей содержит имена ролей xml?

Спасибо д.


person Detonator    schedule 31.03.2016    source источник


Ответы (1)


Пытаться

var forms = root.Descendants("form")
                .Where(form => form.Elements("roles")
                                   .Elements("role")
                                   .Attributes("name")
                                   .Any(n => roles.Contains(n.Value))
                       ).ToList();
person Martin Honnen    schedule 31.03.2016