Я не лучший Linq, и я написал следующий запрос, и мне кажется, что мое предложение where избыточно, и должен быть лучший способ?Неправильно/избыточно, где статья
Учитывая следующую структуру XML:
<Views>
<Fulfillment>
<SecurityRoleName>ABCD</SecurityRoleName>
<SecurityRoleViews>
<RoleView name="A" />
<RoleView name="B" />
<RoleView name="C" />
<RoleView name="D" />
<RoleView name="E" />
<RoleView name="F" />
</SecurityRoleViews>
<PublicRoleViews>
<RoleView name="Z" />
<RoleView name="Y" />
<RoleView name="X" />
<RoleView name="W" />
<RoleView name="V" />
<RoleView name="U" />
</PublicRoleViews>
</Fulfillment>
</Views>
я написал следующее, чтобы получить одно значение (FulfillmentRoleName) и два списка (SecuredViews, PublicViews) объектов.
FulfillmentRoleName = configParms.Descendants("Fulfillment")
.Where(node => (string)node.Element("SecurityRoleName") == "SecurityRoleName")
.Select(node => node.Value.ToString())
.First();
SecuredViews = configParms.Descendants("SecurityRoleViews")
.Where(node => (string)node.Element("RoleView") == "RoleView")
.Select(node => node.Attribute("name").Value.ToString())
.ToList();
PublicViews = configParms.Descendants("PublicRoleViews")
.Where(node => (string)node.Element("RoleView") == "RoleView")
.Select(node => node.Attribute("name").Value.ToString())
.ToList();
Я хотел бы следующие значения:
FulfillmentRoleName = ABCD
SecuredViews = Список имен A, B, C ...
PublicViews = Список имен Z, Y , X ....
это где положение, что я неуверен:
.Where(node => (string)node.Element("RoleView") == "RoleView")
Кажется, должен быть более элегантный способ найти этот узел?
Спасибо, что нашли время, чтобы помочь
В соответствии с рекомендацией Ahmad Mageed Я использую более изящный элемент («») подход. Однако я получаю ошибку создания экземпляра ... как будто коллекция элементов еще не построена ??
Однако, если я использую configParms.Root.Value Я получаю значение SecurityRoleName ???
Я бы подумал, что представления будут корнем .... или это первый узел, который имеет значение ???
Два списка запросов имеют смысл и именно то, что я был после. Спасибо! Один вопрос относительно первого запроса. Мне нужно спуститься по дереву узлов из Fulfillment в SecurityRoleName и т. Д. Я предполагаю, что вы, вероятно, просто подскочили к нему в вашем примере ...... configParms.Element («SecurityRoleName»). Значение – GPGVM
@ user1278561 Да , используя «Элемент», я иду от корня, к выполнению, затем снова в SecurityRoleName.'Descendants (" SecurityRoleName ")' позволят вам захватить все узлы этого имени, не пройдя узлы, но возвращает 'IEnumerable', что приведет к более длинному запросу с' First'/'Single' в конце (аналогично что вы изначально имели). Так как это действительно один элемент, подход «Элемент» является более четким и более прямым. –
Ну ... Я что-то упускаю. См. Мое редактирование. – GPGVM