Вопрос

Получение сущностей из базы

Как на сервере написать вот такой запрос? Что за фильтр? 

select * from ContactFolder

where UsrCode in ()

Вот так не работает:

contactFolders.Filters.Add(contactFolders.CreateFilterWithParameters(

               FilterComparisonType.Contain, "UsrCode", new List { "agent", "client", "operator", "test" }));

Нравится

6 комментариев
Лучший ответ

Добрый день. Запрос делайте к ContactInFolder.

EntitySchema schema = UserConnection.EntitySchemaManager.GetInstanceByName("ContactInFolder");
EntitySchemaQuery esq = new EntitySchemaQuery(schema);
esq.UseAdminRights = false;
esq.AddAllSchemaColumns();
esq.Filters.Add(esq.CreateFilterWithParameters(
        FilterComparisonType.Equal, "Folder.UsrCode", new string[] { "agent", "client", "operator", "test" }));
var sel = esq.GetSelectQuery(UserConnection);
sel.BuildParametersAsValue = true;
var text = sel.GetSqlText();
var collection = esq.GetEntityCollection(UserConnection);

 

new string[] { "test" }

Варфоломеев Данила,

contactFolders.Filters.Add(contactFolders.CreateFilterWithParameters(

               FilterComparisonType.Contain, "UsrCode", new string[] { "agent", "client", "operator", "test" }));

 

при

var contactFoldersCollection = contactFolders.GetEntityCollection(userConnection);

возникает ошибка Условие типа \\\"Contain\\\" не может содержать более одного выражения в правой части\

grechushkin,

Замените FilterComparisonType.Contain на FilterComparisonType.Equal

Варфоломеев Данила,

в общем нужен вот такой запрос:

select * from ContactInFolder cif

inner join ContactFolder cf on (cf.Id = cif.FolderId)

where cf.UsrCode in (...)

 

 

Добрый день. Запрос делайте к ContactInFolder.

EntitySchema schema = UserConnection.EntitySchemaManager.GetInstanceByName("ContactInFolder");
EntitySchemaQuery esq = new EntitySchemaQuery(schema);
esq.UseAdminRights = false;
esq.AddAllSchemaColumns();
esq.Filters.Add(esq.CreateFilterWithParameters(
        FilterComparisonType.Equal, "Folder.UsrCode", new string[] { "agent", "client", "operator", "test" }));
var sel = esq.GetSelectQuery(UserConnection);
sel.BuildParametersAsValue = true;
var text = sel.GetSqlText();
var collection = esq.GetEntityCollection(UserConnection);

 

Можно вот так (CreateFilterWithParameters может иметь переменное количество параметров):

esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ColumnPath", "value1", "value2", "value3", ..., "valueN"));

Если количество значений неизвестно (на вход приходит массив или список значений), то можно следующим образом:

esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ColumnPath", someStrings.OfType<object>().ToArray()));

Во втором случае важно, чтобы последним аргументом передавался массив object-ов (object[]). Массив строк работать не будет, т.к. будет воспринят как единичный параметр.

Показать все комментарии