Я пишу QueryExpression с фильтром, используя оператор ConditionOperator.In и передаю строки в качестве значений. Однако, используя трассировку на сервере CRM, я могу просмотреть сгенерированный SQL, и он заменяет мои строки на «1, 2, 3».
В частности, этот код:
var filter = new FilterExpression(LogicalOperator.And);
filter.AddCondition("primaryobjecttypecode", ConditionOperator.In, "account", "contact");
var query = new QueryExpression("sdkmessagefilter")
{
ColumnSet = new ColumnSet("primaryobjecttypecode"),
Criteria = filter,
LinkEntities =
{
new LinkEntity()
{
LinkFromEntityName = "sdkmessagefilter",
LinkFromAttributeName = "sdkmessageid",
LinkToEntityName = "sdkmessage",
LinkToAttributeName = "sdkmessageid",
Columns = new ColumnSet("name"),
},
}
};
var response = orgProxy.RetrieveMultiple(query);
Результаты в этом SQL:
select top 5001
"sdkmessagefilter0".PrimaryObjectTypeCode as "primaryobjecttypecode",
"sdkmessage1".Name as "sdkmessage1.name"
from
SdkMessageFilter as "sdkmessagefilter0"
join SdkMessage as "sdkmessage1"
on ("sdkmessagefilter0".SdkMessageId = "sdkmessage1".SdkMessageId)
where
((("sdkmessagefilter0".PrimaryObjectTypeCode in (1, 2))))
order by "sdkmessagefilter0".SdkMessageFilterId asc
В конечном итоге это приводит к исключению SqlException из-за невозможности регистрировать "1" как строку.
Почему строковые значения {"account", "contact"} превращаются в значения {1, 2} int?
Я использую Dynamics CRM 2011 UR 10 на сервере, и мое приложение использует SDK 5.0.9689.2166.