0

我想将 SQL 语句转换为查询表达式。

   SELECT q.EMailAddress, fe.torecipients, fe.subject, fe.createdon, fe.actualend ,fe.ActivityId
    FROM QueueItem qi WITH (NOLOCK)
    inner join Email fe WITH (NOLOCK) ON fe.ActivityId = qi.ObjectId and fe.RegardingObjectId is null
    inner join Queue q WITH (NOLOCK) ON q.QueueId= qi.QueueId and q.EMailAddress is not null
    WHERE PATINDEX(CONCAT('%', q.emailaddress, '%'), fe.torecipients ) >= 1 
    ORDER BY fe.createdon DESC

我可以做到这一点。如何转换 'PATINDEX(CONCAT('%', q.emailaddress, '%'), fe.torecipients) >= 1'。你能帮助我吗?

QueryExpression queueQuery = new QueryExpression(Constants.QueryQueueItem);
queueQuery.ColumnSet.AddColumns(Constants.QueryIncidentId);

LinkEntity emailLink = new LinkEntity();
emailLink.LinkFromEntityName = Constants.QueryQueueItem;
emailLink.LinkToAttributeName = Constants.QueryEmail;
emailLink.LinkFromAttributeName = "ObjectId";
emailLink.LinkToAttributeName = "ActivityId";
emailLink.JoinOperator = JoinOperator.Inner;
emailLink.LinkCriteria.AddCondition(new ConditionExpression("RegardingObjectId", ConditionOperator.Null, true))

LinkEntity queueLink = new LinkEntity();
queueLink.LinkFromEntityName = "QueueItem";
queueLink.LinkToAttributeName = "Queue";
queueLink.LinkFromAttributeName = "QueueId";
queueLink.LinkToAttributeName = "QueueId";
queueLink.JoinOperator = JoinOperator.Inner;
queueLink.LinkCriteria.AddCondition(new ConditionExpression("EMailAddress", ConditionOperator.NotNull, true));

queueQuery.LinkEntities.Add(emailLink);
queueQuery.LinkEntities.Add(queueLink);

ConditionExpression emailCondition = new ConditionExpression();
emailCondition.AttributeName = Constants.QueryIncidentId;
emailCondition.Operator = ConditionOperator.NotNull;

FilterExpression emailFilter = new FilterExpression();
emailFilter.Conditions.Add(emailCondition);
queueQuery.Criteria = emailFilter;
4

1 回答 1

0

FetchXML 不支持 PATINDEX 函数,因此快速选项是使用 Like 运算符:

new ConditionExpression(“torecipients”, ConditionOperator.Like, "%"+q.emailaddress+"%");

允许您匹配电子邮件地址的更复杂的选项是加入电子邮件的活动方并根据匹配的活动方类型和 AddressUsed 进行过滤。

于 2017-11-16T13:39:23.250 回答