16._yalandaev_linq_v_bpmonline

advertisement
«Центр Разработки и Внедрения
Террасофт Поволжье»
Примеры применения LINQ в
BPM’Online
Содержание
Фильтрация
Группировка
Соединение
Фильтрация
Запрос ESQ
var entitySchemaManager =
UserConnection.GetSchemaManager("EntitySchemaManager") as EntitySchemaManager;
var contactESQ = new EntitySchemaQuery(entitySchemaManager, "Contact");
contactESQ.JoinRightState = Core.DB.QueryJoinRightLevel.Disabled;
contactESQ.AddAllSchemaColumns();
EntityCollection entities = contactESQ.GetEntityCollection(UserConnection);
SELECT * FROM [Contact]
Ну, например…
• Получим, сколько записей, у которых поле «FirstName»
равно «Анна»
int count = (from elems in entities
where elems.GetTypedColumnValue<string>("FirstName") == "Анна"
select elems).Count();
Группировка
Группировка
• Используем тот же самый запрос ESQ и сгруппируем
полученные записи по полю «FirstName», примерно
так:
Key: FirstName1
Key: FirstName2
Key: FirstName3
Group1
Group2
Group3
LINQ-запрос
var groupedQuery = from elems in entities
group elems by elems.GetTypedColumnValue<string>("FirstName") into groupedEntities
select groupedEntities;
//Выведем результат запроса:
foreach (var group in groupedQuery)
{
Log(group.Key);
foreach (var entity in group)
{
Log(string.Format("
{0}", entity.GetTypedColumnValue<string>("Surname")));
}
}
Результат
Наталья
Маркелова
Нестеренко
Макеева
...
Марина
Иванова
Сироткина
Петрова
...
Мария
Хохлова
Шевченко
Воробьева
...
Соединение
Запрос ESQ
var entitySchemaManager = UserConnection.GetSchemaManager("EntitySchemaManager") as
EntitySchemaManager;
var contactESQ = new EntitySchemaQuery(entitySchemaManager, "Contact");
contactESQ.JoinRightState = Core.DB.QueryJoinRightLevel.Disabled;
contactESQ.AddAllSchemaColumns();
EntityCollection contactEntities = contactESQ.GetEntityCollection(UserConnection);
var accountESQ = new EntitySchemaQuery(entitySchemaManager, "Account");
accountESQ.JoinRightState = Core.DB.QueryJoinRightLevel.Disabled;
accountESQ.AddAllSchemaColumns();
EntityCollection accountEntities = accountESQ.GetEntityCollection(UserConnection);
SELECT * FROM [Contact]
SELECT * FROM [Account]
Ну, например…
• Получим только те контакты, у которых указан
контрагент
SELECT * FROM [Contact]
INNER JOIN [Account] ON [Contact].[AccountId] = [Account].[Id]
LINQ-запрос
var innerJoinQuery =
from contacts in contactEntities
join acc in accountEntities on contacts.GetTypedColumnValue<Guid>("AccountId") equals acc.GetTypedColumnValue<Guid>("Id")
select new { ContactName = contacts.GetTypedColumnValue<string>("Name"), AccountName = acc.GetTypedColumnValue<string>("Name") };
//Выведем результат:
foreach(var element in innerJoinQuery)
{
Log(string.Format("{0} : {1}", element.ContactName, element.AccountName));
}
Supervisor : СибАкадемСтрой Недвижимость
Тестов Тест Тестович : Ваш Академгородок
Васильковский Александр : Большой Город
Пупкин : Вектор
Решетинский Николай Валерьевич : СибАкадемСтрой Недвижимость
Плавко Надежда Владимировна : СибАкадемСтрой Недвижимость
Васильковский Александр : Большой Город
Solovey Aleksandr : СибАкадемСтрой Недвижимость
Любимова Оксана Михайловна : СибАкадемСтрой Недвижимость
...
Россия:
443035 Самара,
Московское шоссе 4а
+7 (846) 266-55-69
info@terrasoft.ru
123090, Москва,
Ул. Каланчевская, д. 16
+7 (495) 280-16-80
info@terrasoft.ru
Украина:
03118, Киев, пр-т.
Краснозвездный, 115-А
+38 (044) 363-31-33
info@terrasoft.ua
UK:
PORTLAND HOUSE,
BRESSENDAN PLACE,
LONDON SW1E 5RS
+44 (2) 0338 40040
info@tscrm.com
Alexandria:
901 N Pitt Street, Suite
325 Alexandria
+1 (917) 383-27-70
info@bpmonline.com
Download