我试图了解如何组合 LINQ-to-XML 和 LINQ-to-SQL 查询并执行连接。
具体来说,我有一个包含城市、县和州信息的 SQL 表,我可以使用 LINQ to SQL 对其进行查询,但在同一个查询中,我想加入具有相同州和/或县,并生成一个 XML 作为输出的一部分。
这大概是我的桌子的样子:
╔═════╦══════════════╦════════════════╦═══════╗
║ IDX ║ CITY ║ COUNTY ║ STATE ║
╠═════╬══════════════╬════════════════╬═══════╣
║ 1 ║ YAKUTAT ║ ALEUTIANS EAST ║ AK ║
║ 2 ║ city-1 ║ ALEUTIANS EAST ║ AK ║
║ 3 ║ city-2 ║ ALEUTIANS EAST ║ AK ║
║ 4 ║ city-3 ║ ALEUTIANS WEST ║ AK ║
║ 5 ║ city-4 ║ ALEUTIANS WEST ║ AK ║
║ 6 ║ city-5 ║ ALEUTIANS WEST ║ AK ║
║ 7 ║ xyz ║ ANCHORAGE ║ AK ║
║ 8 ║ abc ║ BETHEL ║ AK ║
║ 9 ║ lmnop ║ WYOMING ║ NY ║
║ 10 ║ pqrst ║ WARSAW ║ NY ║
║ 11 ║ defg ║ WARSAW ║ NY ║
╚═════╩══════════════╩════════════════╩═══════╝
这就是我希望我的 XML 输出的样子。我希望加入将具有相同县的所有城市分组为同一县节点下的节点,然后将一个州的所有县分组为该州节点的子节点。
<State>AK</State>
<County>ALEUTIANS EAST</County>
<City>YAKUTAT</City>
<City>city-1</City>
<City>city-2</City>
<County>ALEUTIANS WEST</County>
<City>city-3</City>
<City>city-4</City>
<City>city-5</City>
<County>ANCHORAGE</County>
<City>xyz</City>
<County>BETHEL</County>
<City>abc</City>
<State>NY</State>
<County>WYOMING</County>
<City>lmnop</City>
<County>WARSAW</County>
<City>pqrst</City>
<City>defg</City>
我确实有这部分工作,我能够成功地从我的数据库中选择行,并且我能够将输出编写为 XML,但我无法将城市和县数据嵌套为州的子节点,我错过了加入部分,目前尚不清楚如何做到这一点。
XDocument xDoc = new XDocument(new XElement("States",
(from states in state.Database
select new XElement(new XElement("State",states.State),
new XElelment("County",states.County),
new XElelment("City",state.City))));
xDoc.Save("C:\\states.xml")
这就是我得到的输出。如您所见,我在我的数据库中获得了所有城市、州和县的完整列表,没有层次结构。
<State>AK</State>
<County>ALEUTIANS EAST</County>
<City>YAKUTAT</City>
<State>AK</State>
<County>ALEUTIANS EAST</County>
<City>city-1</City>
<State>AK</State>
<County>ALEUTIANS EAST</County>
<City>city-2</City>
<State>AK</State>
<County>ALEUTIANS WEST</County>
<City>city-3</City>
<State>AK</State>
<County>ALEUTIANS WEST</County>
<City>city-4</City>
....and so on..