На заметку. Примеры, приведенные в этой статье, реализованы в веб-сервисе. Пакет с реализацией веб-сервиса прикреплен в блоке "Ресурсы".
Ниже приведен метод CreateJson, который используется в примерах для обработки результата запросов.
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
Пример. Выбрать определенное количество записей из требуемой таблицы (схемы объекта).
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;
}
Пример 2
Пример. Выбрать идентификатор, имя и дату рождения контактов, дата рождения которых позже требуемого года.
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;
}
Пример 3
Пример. Выбрать идентификатор, имя и дату рождения контактов, дата рождения которых позже заданного года и у которых указан контрагент.
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;
}
Пример 4
Пример. Выбрать идентификатор и имя всех контактов, присоединив к ним идентификаторы и названия соответствующих контрагентов.
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;
}
Пример 5
Пример. Выбрать идентификатор и имя контактов, являющихся основными для контрагентов.
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;
}
Пример 6
Пример. Выбрать страны и количество городов в стране, если количество городов больше указанного.
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;
}
Пример 7
Пример. Получить идентификатор контакта по его имени.
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;
}