高级转换:
static IEnumerable<XElement> ExpandPaths (IEnumerable<string> paths) { var brokenUp = from path in paths let split = path.Split (new char[] { '\' }, 2) orderby split[0] select new { name = split[0], remainder = split.ElementAtOrDefault (1) }; IEnumerable<XElement> files = from b in brokenUp where b.remainder == null select new XElement ("file", b.name); IEnumerable<XElement> folders = from b in brokenUp where b.remainder != null group b.remainder by b.name into grp select new XElement ("folder", new XAttribute ("name", grp.Key), ExpandPaths (grp) ); return files.Concat (folders); } static void RunQuery() { XElement project = XElement.Load ("myProjectFile.csproj"); XName ns = project.Name.Namespace; IEnumerable<string> paths = from compileItem in project.Elements (ns + "ItemGroup").Elements (ns + "Compile") let include = compileItem.Attribute ("Include") where include != null select include.Value; XElement query = new XElement ("Project", ExpandPaths (paths)); }