If you have IEnumerable<XElement>
and want to call various LINQ extension methods such as Enumerable.Where() or Enumerable.ToDictionary() on it using PowerShell then first load the necessary assemblies:
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Core') [void][System.Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq")
And here’s the code for Where()
:
$whereCond = [System.Func``2[System.Xml.Linq.XElement, bool]] { $args[0].Attribute("Name").Value.Contains('_') -eq $false }; $elems = [System.Linq.Enumerable]::ToDictionary($elems, $whereCond)
and for ToDctionary()
:
$keySelector = [System.Func``2[System.Xml.Linq.XElement, string]] { $args[0].Attribute("Name").Value } $elementSelector = [System.Func``2[System.Xml.Linq.XElement, string]] { $args[0].Attribute("Value").Value } $dic = [System.Linq.Enumerable]::ToDictionary($elems, $keySelector, $elementSelector)