1
QueryExpression Query = new QueryExpression { EntityName = "incident", ColumnSet = new ColumnSet(true) };

            LinkEntity CustomerEntity = new LinkEntity
            {
                LinkFromEntityName = "incident",
                LinkToEntityName = "account",
                LinkFromAttributeName = "customerid",
                LinkToAttributeName = "accountid",
                EntityAlias = "Customer",
                Columns = new ColumnSet("den_firstname", "den_lastname")
            };

            LinkEntity SubSubTypeEntity = new LinkEntity
            {
                LinkFromEntityName = "incident",
                LinkToEntityName = "den_subsubtype",
                LinkFromAttributeName = "den_subsubtypeid",
                LinkToAttributeName = "den_subsubtypeid",
                JoinOperator = JoinOperator.Inner,
                EntityAlias = "SubSubType",
                Columns = new ColumnSet("den_resolvedby")
            };

            Query.ColumnSet = new ColumnSet(true);

            Query.LinkEntities.Add(CustomerEntity);
            Query.LinkEntities.Add(SubSubTypeEntity);

            if (SRStatus > 0)
                Query.Criteria.AddCondition("statuscode", ConditionOperator.Equal, SRStatus);
            if (ResolutionType > 0)
                Query.Criteria.AddCondition("den_roltype", ConditionOperator.Equal, ResolutionType);

            CustomerEntity.LinkCriteria.AddCondition("den_lcouserid", ConditionOperator.Equal, lconameId);

            FilterExpression childFilter = Query.Criteria.AddFilter(LogicalOperator.Or);
            FilterExpression custFilter = CustomerEntity.LinkCriteria.AddFilter(LogicalOperator.Or);

            if (!string.IsNullOrEmpty(SearchText))
            {
                childFilter.AddCondition("den_userid", ConditionOperator.Equal, SearchText);
                childFilter.AddCondition("ticketnumber", ConditionOperator.Like, "%" + SearchText + "%");
                childFilter.AddCondition("title", ConditionOperator.Equal, SearchText);

//以下のコードは問題を引き起こしています。これを削除すると動作し、結果が得られます。しかし、両方のフィルターを追加する必要があります

                custFilter.AddCondition("name", ConditionOperator.Equal, SearchText);
                custFilter.AddCondition("den_firstname", ConditionOperator.Equal, SearchText);
                //custFilter.AddCondition("den_lastname", ConditionOperator.Equal, SearchText);
                custFilter.AddCondition("emailaddress1", ConditionOperator.Equal, SearchText);
                custFilter.AddCondition("telephone1", ConditionOperator.Equal, SearchText);
            }

custFilter または childFilter を使用してすべての条件を削除すると結果が得られますが、両方を保持すると結果が返されます (エラーなし)。

4

1 に答える 1

0

以下の調整で問題が解決しました。

QueryExpression Query = new QueryExpression { EntityName = "incident", ColumnSet = new ColumnSet(true) };

            LinkEntity CustomerEntity = new LinkEntity
            {
                LinkFromEntityName = "incident",
                LinkToEntityName = "account",
                LinkFromAttributeName = "customerid",
                LinkToAttributeName = "accountid",
                EntityAlias = "Customer",
                Columns = new ColumnSet("den_firstname", "den_lastname", "name", "accountid", "emailaddress1", "telephone1", "den_lcouserid"),
                JoinOperator = JoinOperator.Inner
            };
            CustomerEntity.LinkCriteria.AddCondition("den_lcouserid", ConditionOperator.Equal, lconameId);

            LinkEntity SubSubTypeEntity = new LinkEntity
            {
                LinkFromEntityName = "incident",
                LinkToEntityName = "den_subsubtype",
                LinkFromAttributeName = "den_subsubtypeid",
                LinkToAttributeName = "den_subsubtypeid",
                JoinOperator = JoinOperator.Inner,
                EntityAlias = "SubSubType",
                Columns = new ColumnSet("den_resolvedby")
            };            

            Query.LinkEntities.Add(CustomerEntity);
            Query.LinkEntities.Add(SubSubTypeEntity);                             

            FilterExpression incidentChildFilterOR = Query.Criteria.AddFilter(LogicalOperator.Or);
            FilterExpression incidentChildFilterAND = Query.Criteria.AddFilter(LogicalOperator.And);
            FilterExpression customerChildFilterOR = CustomerEntity.LinkCriteria.AddFilter(LogicalOperator.Or);

            if (SRStatus > 0)
                incidentChildFilterAND.AddCondition("statuscode", ConditionOperator.Equal, SRStatus);
            if (ResolutionType > 0)
                incidentChildFilterAND.AddCondition("den_roltype", ConditionOperator.Equal, ResolutionType);  

            if (!string.IsNullOrEmpty(SearchText))
            {
                if (SRStatus > 0)
                    incidentChildFilterOR.AddCondition("statuscode", ConditionOperator.Equal, SRStatus);
                if (ResolutionType > 0)
                    incidentChildFilterOR.AddCondition("den_roltype", ConditionOperator.Equal, ResolutionType); 

                incidentChildFilterOR.AddCondition("den_userid", ConditionOperator.Equal, SearchText);
                incidentChildFilterOR.AddCondition("ticketnumber", ConditionOperator.Like, "%" + SearchText + "%");
                incidentChildFilterOR.AddCondition("title", ConditionOperator.Equal, SearchText);


                customerChildFilterOR.AddCondition("name", ConditionOperator.Equal, SearchText);
                customerChildFilterOR.AddCondition("den_firstname", ConditionOperator.Equal, SearchText);
                customerChildFilterOR.AddCondition("den_lastname", ConditionOperator.Equal, SearchText);
                customerChildFilterOR.AddCondition("emailaddress1", ConditionOperator.Equal, SearchText);
                customerChildFilterOR.AddCondition("telephone1", ConditionOperator.Equal, SearchText);
            }
于 2015-05-07T05:00:59.850 に答える