2015-09-08 2 views
1

У меня есть объект PowerShell, и я хочу отфильтровать результаты.Использование C# Linq для запроса вложенных объектов

public Collection<PSObject> Groups; 

Я успешно достиг этого, используя linq, если мне нужно фильтровать на основе прямого элемента. Но что, если я хочу фильтровать на основе уровня 1 или 2 уровня?

Вот запросов LINQ для фильтрации прямого члена:

var groupMembershipFilter = (dynamic)CsQ.Groups.Where(x => x.Members["AgentsByUri"].Value != null).ToList(); 

Однако мне нужно развернуть другой уровень. В PowerShell это будет легко:

$x.AgentsByUri.AbsoluteUri 

Я пробовал все виды, но не могу понять, как сделать эту работу. Так что вы можете лучше понять структуру объекта здесь несколько снимков экрана:

enter image description here

enter image description here

enter image description here

Из приведенных выше снимков экрана вы можете увидеть «AgentsByUri» является коллекция. Внутри этой коллекции я хочу проверить, содержит ли свойство «AbsoluteUri» определенное строковое значение.

Другая вещь, которую я не понимаю, - это то, почему я должен использовать «Участников» и не могу просто использовать «BaseObject» - эта структура выглядит гораздо более похожей на PowerShell и, если возможно, будет моим предпочтением, поскольку это лучше переводит мой мозг PowerShell ,

Извините за мою терминологию, я достаточно новичок в C#! Надеюсь, это имеет смысл :)

Любая помощь или руководство будут высоко оценены.

ответ

0

Попробуйте это:

var groupMembershipFilter = (dynamic)CsQ.Groups.Where(x => x.Members["AgentsByUri"].Any(x => x.AbsoluteUri == "url")).ToList(); 
+0

Приветствия для этого, не показалось, что нравится Любой бит. Я немного продвинулся и задал здесь новый вопрос, так как я думаю, что это может быть чересчур запутанным - http://stackoverflow.com/questions/32511346/using-linq-to-query-nested-objects –