Я хочу выполнить запрос, который выбирает всех клиентов и соответствующие адреса для каждого клиента.Каждый клиент может иметь ноль, один или несколько адресов.
Это то, что я пробовал:
sql = "SELECT customers.*, addresses.* FROM customers LEFT JOIN addresses ON addresses.CustomerId = customers.Id ORDER BY customers.Id OFFSET @start ROWS FETCH NEXT @end ROWS ONLY";
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@start", limitStart));
parameters.Add(new SqlParameter("@end", limitEnd));
DataSet set = Db.ExecuteSelectQuery(sql, parameters);
DataTable table = set.Tables["customers"];
Console.WriteLine("Tables count: " + set.Tables.Count); // says there's 1 table.
List<Customer> customers = new List<Customer>();
foreach(DataRow row in table.Rows)
{
Customer cust = new Customer();
cust.Id = row.Field<int>("Id");
cust.ClientNumber = row.Field<string>("clientnumber");
cust.Date = DateTime.Parse(row.Field<string>("date"));
cust.Firstname = row.Field<string>("firstname");
cust.Insertion = row.Field<string>("insertion");
cust.Lastname = row.Field<string>("lastname");
foreach(DataRow addrRow in /* ......?...... */) // Want to loop through addresses of the current customer row.
{
Address address = new Address();
address.Street = addrRow.Field<string>("Street");
address.HouseNumber = addrRow.Field<string>("Number");
address.PostalCode = addrRow.Field<string>("PostalCode");
address.City = addrRow.Field<string>("City");
address.Country = 0;// row.Field<int>("CountryCode");
cust.Addresses.Add(address);
}
customers.Add(cust);
}
return customers;
Проблема в том, что я не знаю, как обработать результат запроса с использованиемDataTable
и DataSet
классы SqlClient
.
Я не могу найти в Интернете ничего, объясняющего, как вы можете получить доступ к выбранным адресам для каждого клиента.
Может кто-нибудь объяснить мне или, может быть, показать мне пример кода?