我在一个客户关系管理项目中工作,该项目需要创建QueryExpression来过滤基于输入客户全名的客户关系管理记录。
var query = new QueryExpression
{
EntityName = Xrm.Contact.EntityLogicalName,
ColumnSet = cols
};
query.Criteria.AddCondition("statecode", ConditionOperator.Equal, (int)ContactState.Active);
query.Criteria.FilterOperator = LogicalOperator.And;
var subfilter = new FilterExpression(LogicalOperator.Or);
var conditionCheckFullNameEqualInput = new ConditionExpression("fullname", ConditionOperator.Equal, revenueEntity.ClientName);
subfilter.Conditions.Add(conditionCheckFullNameEqualInput);
var filterCheckInputContainedInFullName = new FilterExpression(LogicalOperator.And);
Regex rgx0 = new Regex("[^a-zA-Z0-9]");
var tmparr0 = rgx0.Split(revenueEntity.ClientName).Where(s => !DataFeedProviderInputValidator.IsEmptyValue(s)).ToArray(); ;
foreach (var tmparritem in tmparr0)
filterCheckInputContainedInFullName.AddCondition("fullname", ConditionOperator.Contains, tmparritem);//need to handle case-sensitive scenarios
subfilter.AddFilter(filterCheckInputContainedInFullName);
var filterCheckFullNameContainedInInput = new FilterExpression(LogicalOperator.And);
filterCheckFullNameContainedInInput.AddCondition("firstname", ConditionOperator.In, tmparr0);//need to handle case-sensitive scenarios
filterCheckFullNameContainedInInput.AddCondition("lastname", ConditionOperator.In, tmparr0);//need to handle case-sensitive scenarios
subfilter.AddFilter(filterCheckFullNameContainedInInput);
query.Criteria.Filters.Add(subfilter);上面代码的问题是,如果CRM上有一个全名为"Fry,PARASKEVI“的联系人,如果我的输入是这样的"FRY Paraskevi”,它将不会匹配。但如果我的输入是"Fry Paraskevi“或"Paraskevi Fry",它将完全匹配。有几条记录就是这样的。
我的问题是,FilterExpression是否支持过滤不区分大小写的记录(如String.IndexOf或String.Equals)?我该怎么办?
发布于 2018-01-10 21:17:39
您正在查找ConditionOperator.Like,请按如下方式使用:
filterCheckInputContainedInFullName.AddCondition("fullname", ConditionOperator.Like, "%" + tmparritem);更新:
这似乎更像是SQL数据库排序规则,它决定了大小写敏感度,而不是CRM SDK本身。
也许您必须将不区分大小写(大写或小写)的字段值存储在另一个属性中,您可以将其用作过滤的workaround。
https://stackoverflow.com/questions/48185421
复制相似问题