Я пишу WebService, который должен конвертировать DataSet в XML. Мой DataSet на самом деле список отелей с категориями. Каждый отель может принадлежать к одной или нескольким категориям.
Я последовал примеру ЗДЕСЬ , и он работает хорошо, за исключением того, что я не получил желаемого результата.
Вот что я получаю: (пример 1)
<hotels>
<hotel>
<name>Hilton Resort</name>
<category>
<catname>Hotel</catname>
</category>
<category>
<catname>Resort</catname>
</category>
<category>
<catname>Golf & Spa</catname>
</category>
</hotel>
<hotel>
<name>Hyatt</name>
<category>
<catname>Resort</catname>
</category>
<category>
<catname>Golf & Spa</catname>
</category>
</hotel>
</hotel>
но я бы хотел получить что-то вроде этого: (пример 2)
<hotels>
<hotel>
<name>Hilton Resort</name>
<categories>
<catname>Hotel</catname>
<catname>Resort</catname>
<catname>Golf & Spa</catname>
</categories>
</hotel>
<hotel>
<name>Hyatt</name>
<categories>
<catname>Hotel</catname>
<catname>Golf & Spa</catname>
</categories>
</hotel>
</hotel>
Вот мой текущий код, который создает XML, как в примере 1:
...
...
SqlDataAdapter hotelDA = new SqlDataAdapter(SQLHotels, SQLConn);
SqlDataAdapter catDA = new SqlDataAdapter(SQLCats, SQLConn);
DataSet ds = new DataSet("Hotels");
hotelDA.Fill(ds, "Hotel");
catDA.Fill(ds, "Category");
DataRelation SleepRel = ds.Relations.Add("Hotel",
ds.Tables["Sleep"].Columns["Id"],
ds.Tables["Category"].Columns["AccID"]);
SleepRel.Nested = true;
SQLConn.Close();
return ds;
SQLHotels - оператор SQL SELECT, который выбирает все отели
SQLCats - оператор SQL SELECT, который выбирает все категории
Id - идентификатор отеля
AccId - идентификатор отеля в таблице Категория (внешний ключ)
Мои вопросы:
1) Это действительно имеет значение? Одна структура лучше другой?
2) Можно ли установить связь между двумя таблицами в DataSet, чтобы получить вывод, как во втором (желательном) примере XML.