【问题标题】:How do i change my LINQ query to show the correct XML?如何更改我的 LINQ 查询以显示正确的 XML? 【发布时间】:2020-08-26 21:23:14 【问题描述】: 所以我无法打印正确的 XML。这个想法是从查询中创建一个 XML。 我有两节课;曲目和 CD。 Track 包含轨道的属性,CD 包含名称和艺术家属性以及 Listclass Track { public string Title { get; set; } public string Artist { get; set; } public TimeSpan Length { get; set; } public static List<Track> CreateTrackList() { List<Track> tracks = new List<Track> { new Track { Title = "Numb", Artist = "Linkin Park", Length = new TimeSpan(00, 03, 05)}, new Track { Title = "Breaking the Habit", Artist = "Linkin Park", Length = new TimeSpan(00, 03, 16)}, new Track { Title = "Faint", Artist = "Linkin Park", Length = new TimeSpan(00, 02, 42)} }; return tracks; } } class CD { public string Artist { get; set; } public string Name { get; set; } public List<Track> Tracks { get; set; } public CD(string artist, string name, List<Track> tracks) { this.Artist = artist; this.Name = name; this.Tracks = tracks; } } List<Track> tracks = Track.CreateTrackList(); CD cd = new CD("Linkin Park", "Meteora", tracks); String xmlString; using (WebClient wc = new WebClient()) { xmlString = wc.DownloadString(@"http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=b5cbf8dcef4c6acfc5698f8709841949&artist=Linkin+Park&album=Meteora"); } XDocument myXMLDoc = XDocument.Parse(xmlString); IEnumerable<XElement> query1 = from track in myXMLDoc.Descendants("track") from t in cd.Tracks where track.Element("name").Value != t.Title && track.Element("artist").Element("name").Value == t.Artist select track; foreach (XElement t in query1) { Console.WriteLine(t); } 当我运行代码时,我得到以下 XML 输出: <track rank="1"> <name>Foreword</name> <url>https://www.last.fm/music/Linkin+Park/_/Foreword</url> <duration>13</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="1"> <name>Foreword</name> <url>https://www.last.fm/music/Linkin+Park/_/Foreword</url> <duration>13</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="1"> <name>Foreword</name> <url>https://www.last.fm/music/Linkin+Park/_/Foreword</url> <duration>13</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="2"> <name>Don't Stay</name> <url>https://www.last.fm/music/Linkin+Park/_/Don%27t+Stay</url> <duration>188</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="2"> <name>Don't Stay</name> <url>https://www.last.fm/music/Linkin+Park/_/Don%27t+Stay</url> <duration>188</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="2"> <name>Don't Stay</name> <url>https://www.last.fm/music/Linkin+Park/_/Don%27t+Stay</url> <duration>188</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="3"> <name>Somewhere I Belong</name> <url>https://www.last.fm/music/Linkin+Park/_/Somewhere+I+Belong</url> <duration>214</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="3"> <name>Somewhere I Belong</name> <url>https://www.last.fm/music/Linkin+Park/_/Somewhere+I+Belong</url> <duration>214</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="3"> <name>Somewhere I Belong</name> <url>https://www.last.fm/music/Linkin+Park/_/Somewhere+I+Belong</url> <duration>214</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="4"> <name>Lying from You</name> <url>https://www.last.fm/music/Linkin+Park/_/Lying+from+You</url> <duration>175</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="4"> <name>Lying from You</name> <url>https://www.last.fm/music/Linkin+Park/_/Lying+from+You</url> <duration>175</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="4"> <name>Lying from You</name> <url>https://www.last.fm/music/Linkin+Park/_/Lying+from+You</url> <duration>175</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="5"> <name>Hit the Floor</name> <url>https://www.last.fm/music/Linkin+Park/_/Hit+the+Floor</url> <duration>164</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="5"> <name>Hit the Floor</name> <url>https://www.last.fm/music/Linkin+Park/_/Hit+the+Floor</url> <duration>164</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="5"> <name>Hit the Floor</name> <url>https://www.last.fm/music/Linkin+Park/_/Hit+the+Floor</url> <duration>164</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="6"> <name>Easier to Run</name> <url>https://www.last.fm/music/Linkin+Park/_/Easier+to+Run</url> <duration>204</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="6"> <name>Easier to Run</name> <url>https://www.last.fm/music/Linkin+Park/_/Easier+to+Run</url> <duration>204</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="6"> <name>Easier to Run</name> <url>https://www.last.fm/music/Linkin+Park/_/Easier+to+Run</url> <duration>204</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="7"> <name>Faint</name> <url>https://www.last.fm/music/Linkin+Park/_/Faint</url> <duration>162</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="7"> <name>Faint</name> <url>https://www.last.fm/music/Linkin+Park/_/Faint</url> <duration>162</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="8"> <name>Figure.09</name> <url>https://www.last.fm/music/Linkin+Park/_/Figure.09</url> <duration>197</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="8"> <name>Figure.09</name> <url>https://www.last.fm/music/Linkin+Park/_/Figure.09</url> <duration>197</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="8"> <name>Figure.09</name> <url>https://www.last.fm/music/Linkin+Park/_/Figure.09</url> <duration>197</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="9"> <name>Breaking the Habit</name> <url>https://www.last.fm/music/Linkin+Park/_/Breaking+the+Habit</url> <duration>196</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="9"> <name>Breaking the Habit</name> <url>https://www.last.fm/music/Linkin+Park/_/Breaking+the+Habit</url> <duration>196</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="10"> <name>From the Inside</name> <url>https://www.last.fm/music/Linkin+Park/_/From+the+Inside</url> <duration>175</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="10"> <name>From the Inside</name> <url>https://www.last.fm/music/Linkin+Park/_/From+the+Inside</url> <duration>175</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="10"> <name>From the Inside</name> <url>https://www.last.fm/music/Linkin+Park/_/From+the+Inside</url> <duration>175</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="11"> <name>Nobody's Listening</name> <url>https://www.last.fm/music/Linkin+Park/_/Nobody%27s+Listening</url> <duration>178</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="11"> <name>Nobody's Listening</name> <url>https://www.last.fm/music/Linkin+Park/_/Nobody%27s+Listening</url> <duration>178</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="11"> <name>Nobody's Listening</name> <url>https://www.last.fm/music/Linkin+Park/_/Nobody%27s+Listening</url> <duration>178</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="12"> <name>Session</name> <url>https://www.last.fm/music/Linkin+Park/_/Session</url> <duration>144</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="12"> <name>Session</name> <url>https://www.last.fm/music/Linkin+Park/_/Session</url> <duration>144</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="12"> <name>Session</name> <url>https://www.last.fm/music/Linkin+Park/_/Session</url> <duration>144</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="13"> <name>Numb</name> <url>https://www.last.fm/music/Linkin+Park/_/Numb</url> <duration>188</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> <track rank="13"> <name>Numb</name> <url>https://www.last.fm/music/Linkin+Park/_/Numb</url> <duration>188</duration> <streamable fulltrack="0">0</streamable> <artist> <name>Linkin Park</name> <mbid>f59c5520-5f46-4d2c-b2c4-822eabf53419</mbid> <url>https://www.last.fm/music/Linkin+Park</url> </artist> </track> 如您所见,它显示所有曲目 3 次,而 t.Title 中的曲目显示两次。我如何更改我的代码,以便它显示每首曲目一次,除了 t.Title 中的曲目? 【问题讨论】: 欢迎来到 Stack Overflow。请阅读the help pages,接受SO tour,阅读How to Ask,以及this question checklist。最后请在选择标签时小心,不要选择 e.g. C 语言标签而不是 C#。也请了解如何edit您的问题来解决问题。 当您执行 foreach(query1 中的 XElement t)时,您可能想要进行分组。见stackoverflow.com/questions/12097185/… From : track.Element("name").Value != t.Title To : track.Element("name").Value == t.Title 您使用不等于而不是等于. 标签: c# xml linq 【解决方案1】: 您正在执行交叉连接,但根据描述,您似乎正在“where”中寻找简单的过滤,有人认为是这样的: IEnumerable<XElement> query1 = from track in myXMLDoc.Descendants("track") where !cd.Tracks.Any(an=> an.Title == track.Element("name").Value && track.Element("artist").Element("name").Value == an.Artist) select track; 【讨论】: 这很完美,也很完美。非常感谢!