Получение данных из базы
Glossary Item Box
Примеры использования класса Select для получения данных из базы
Пакет с конфигурационным веб-сервисом, реализующим приведенные ниже примеры, можно скачать по ссылке.
Метод обработки результатов запроса, используемый в примерах
private string CreateJson(IDataReader dataReader) { var list = new List<dynamic>(); var cnt = dataReader.FieldCount; var fields = new List<string>(); for (int i = 0; i < cnt; i++) { fields.Add(dataReader.GetName(i)); } while (dataReader.Read()) { dynamic exo = new System.Dynamic.ExpandoObject(); foreach (var field in fields) { ((IDictionary<String, Object>)exo).Add(field, dataReader.GetColumnValue(field)); } list.Add(exo); } return JsonConvert.SerializeObject(list); }
Пример 1
Получить текст SQL запроса на выборку
public string GetSqlTextExample() { var result = ""; var select = new Select(UserConnection) .Column(Column.Asterisk()) .From("Contact"); result = select.GetSqlText(); return result; }
Пример 2
Выбрать определенное количество записей из требуемой таблицы (схемы объекта)
public string SelectColumns(string tableName, int top) { top = top > 0 ? top : 1; var result = "{}"; var select = new Select(UserConnection) .Top(top) .Column(Column.Asterisk()) .From(tableName); using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) { using (IDataReader dataReader = select.ExecuteReader(dbExecutor)) { result = CreateJson(dataReader); } } return result; }
Пример 3
Выбрать идентификатор, имя и дату рождения контактов, дата рождения которых позже требуемого года
public string SelectContactsYoungerThan(string birthYear) { var result = "{}"; var year = DateTime.ParseExact(birthYear, "yyyy", CultureInfo.InvariantCulture); var select = new Select(UserConnection) .Column("Id") .Column("Name") .Column("BirthDate") .From("Contact") .Where("BirthDate").IsGreater(Column.Parameter(year)) .Or("BirthDate").IsNull() .OrderByDesc("BirthDate") as Select; using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) { using (IDataReader dataReader = select.ExecuteReader(dbExecutor)) { result = CreateJson(dataReader); } } return result; }
Пример 4
Выбрать идентификатор, имя и дату рождения контактов, дата рождения которых позже заданного года и у которых указан контрагент
public string SelectContactsYoungerThanAndHasAccountId(string birthYear) { var result = "{}"; var year = DateTime.ParseExact(birthYear, "yyyy", CultureInfo.InvariantCulture); var select = new Select(UserConnection) .Column("Id") .Column("Name") .Column("BirthDate") .From("Contact") .Where() .OpenBlock("BirthDate").IsGreater(Column.Parameter(year)) .Or("BirthDate").IsNull() .CloseBlock() .And("AccountId").Not().IsNull() .OrderByDesc("BirthDate") as Select; using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) { using (IDataReader dataReader = select.ExecuteReader(dbExecutor)) { result = CreateJson(dataReader); } } return result; }
Пример 5
Выбрать идентификатор и имя всех контактов, присоединив к ним идентификаторы и названия соответствующих контрагентов
public string SelectContactsJoinAccount() { var result = "{}"; var select = new Select(UserConnection) .Column("Contact", "Id").As("ContactId") .Column("Contact", "Name").As("ContactName") .Column("Account", "Id").As("AccountId") .Column("Account", "Name").As("AccountName") .From("Contact") .Join(JoinType.Inner, "Account") .On("Contact", "Id").IsEqual("Account", "PrimaryContactId") as Select; using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) { using (IDataReader dataReader = select.ExecuteReader(dbExecutor)) { result = CreateJson(dataReader); } } return result; }
Пример 6
Выбрать идентификатор и имя контактов, являющихся основными для контрагентов
public string SelectAccountPrimaryContacts() { var result = "{}"; var select = new Select(UserConnection) .Column("Id") .Column("Name") .From("Contact").As("C") .Where() .Exists(new Select(UserConnection) .Column("A", "PrimaryContactId") .From("Account").As("A") .Where("A", "PrimaryContactId").IsEqual("C", "Id")) as Select; using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) { using (IDataReader dataReader = select.ExecuteReader(dbExecutor)) { result = CreateJson(dataReader); } } return result; }
Пример 7
Выбрать страны и количество городов в стране, если количество городов больше указанного
public string SelectCountriesWithCitiesCount(int count) { var result = "{}"; var select = new Select(UserConnection) .Column(Func.Count("City", "Id")).As("CitiesCount") .Column("Country", "Name").As("CountryName") .From("City") .Join(JoinType.Inner, "Country") .On("City", "CountryId").IsEqual("Country", "Id") .GroupBy("Country", "Name") .Having(Func.Count("City", "Id")).IsGreater(Column.Parameter(count)) .OrderByDesc("CitiesCount") as Select; using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) { using (IDataReader dataReader = select.ExecuteReader(dbExecutor)) { result = CreateJson(dataReader); } } return result; }
Пример 8
Получить идентификатор контакта по его имени
public string SelectCountryIdByCityName(string CityName) { var result = ""; var select = new Select(UserConnection) .Column("CountryId") .From("City") .Where("Name").IsEqual(Column.Parameter(CityName)) as Select; result = select.ExecuteScalar<Guid>().ToString(); return result; }
Смотрите также: