LINQ-to-XMLクエリとLINQ-to-SQLクエリを組み合わせて、結合を実行する方法を理解しようとしています。
具体的には、市、郡、および州の情報を含むSQLテーブルがあり、LINQ to SQLを使用してクエリを実行できますが、同じクエリで、同じ州および/または州の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..