高级转换:
static IEnumerableExpandPaths (IEnumerable 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 files = from b in brokenUp where b.remainder == null select new XElement ("file", b.name); IEnumerable 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 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));}