Как на сервере написать вот такой запрос? Что за фильтр?
select * from ContactFolder
where UsrCode in ()
Вот так не работает:
contactFolders.Filters.Add(contactFolders.CreateFilterWithParameters(
FilterComparisonType.Contain, "UsrCode", new List { "agent", "client", "operator", "test" }));
Нравится
Добрый день. Запрос делайте к 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);
Варфоломеев Данила,
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[]). Массив строк работать не будет, т.к. будет воспринят как единичный параметр.