Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询以返回与具有左外部联接的两个链接标准匹配的实体_C#_Dynamics Crm 2011_Dynamics Crm_Dynamics Crm 2013 - Fatal编程技术网

C# 查询以返回与具有左外部联接的两个链接标准匹配的实体

C# 查询以返回与具有左外部联接的两个链接标准匹配的实体,c#,dynamics-crm-2011,dynamics-crm,dynamics-crm-2013,C#,Dynamics Crm 2011,Dynamics Crm,Dynamics Crm 2013,我有一个查询,当链接到实体“B”和“C”时,应该返回“a”实体,这两个链接有“左外连接”操作符,这样我可以从一个链接或另一个链接接收“a”实体 执行后,它只返回一条记录,这是两个链接标准的通用记录。如果删除到实体“B”的链接,则会得到与链接条件匹配的预期记录。当我在实体“B”的链接存在时删除到实体“C”的链接时,也会发生同样的情况 所以,我假设我的查询只对一个链接有效,但当有两个链接时,它就不能像预期的那样工作,我不明白为什么 事实上我一直在关注这个 以下是我的数据: _____________

我有一个查询,当链接到实体“B”和“C”时,应该返回“a”实体,这两个链接有“左外连接”操作符,这样我可以从一个链接或另一个链接接收“a”实体

执行后,它只返回一条记录,这是两个链接标准的通用记录。如果删除到实体“B”的链接,则会得到与链接条件匹配的预期记录。当我在实体“B”的链接存在时删除到实体“C”的链接时,也会发生同样的情况

所以,我假设我的查询只对一个链接有效,但当有两个链接时,它就不能像预期的那样工作,我不明白为什么

事实上我一直在关注这个

以下是我的数据:

_____________
|     A     |
-------------
|   a_id    |
|     1     | - entity with this id is the only record in the results
|     2     | - entity with this id should appear in the results, but it is not
|     3     | - entity with this id should appear in the results, but it is not

_________________________________
|               B               |
---------------------------------
|   b_one_id    |   b_two_id    |
|       1       |       1       | - matches link criteria with alias "connectionB"
|       2       |       1       | - matches link criteria with alias "connectionB"
|       1       |       444     | - doesn't match link criteria, should not appear

_________________________________
|               C               |
---------------------------------
|   c_one_id    |   c_two_id    |
|       1       |       2       | - matches link criteria with alias "connectionC"
|       3       |       2       | - matches link criteria with alias "connectionC"
|       1       |       555     | - doesn't match link criteria, should not appear
我的查询表达式:

QueryExpression query = new QueryExpression
{
    EntityName = A.EntityLogicalName,
    ColumnSet = new ColumnSet
    {
        AllColumns = false,
        Columns =
        {
            "a_id",
            "a_name"
        }
    }
};

query.Distinct = true;

query.AddLink(B.EntityLogicalName, "a_id", "b_one_id", JoinOperator.LeftOuter);
query.LinkEntities[0].EntityAlias = "connectionB";
query.LinkEntities[0].LinkCriteria.AddCondition("b_two_id", ConditionOperator.Equal, 1);

query.AddLink(C.EntityLogicalName, "a_id", "c_one_id", JoinOperator.LeftOuter);
query.LinkEntities[0].EntityAlias = "connectionC";
query.LinkEntities[0].LinkCriteria.AddCondition("c_two_id", ConditionOperator.Equal, 2);

// doesn't work as expected
query.Criteria.AddFilter(LogicalOperator.Or);
query.Criteria.Filters[0].AddCondition("connectionB", "b_one_id", ConditionOperator.NotNull);
query.Criteria.Filters[0].AddCondition("connectionC", "c_one_id", ConditionOperator.NotNull);

// doesn't work as expected either
query.Criteria.AddCondition("a_id", ConditionOperator.NotNull);
查询表达式转换为以下提取XML查询:

<fetch distinct="true" no-lock="false" mapping="logical">
    <entity name="A">
        <attribute name="a_id" />
        <attribute name="a_name" />
        <filter type="and">
            <filter type="or">
                <!-- doesn't work as expected -->
                <condition attribute="b_one_id" operator="not-null" entityname="connectionB" />
                <condition attribute="c_one_id" operator="not-null" entityname="connectionC" />

                <!-- doesn't work as expected either -->
                <condition attribute="a_id" operator="not-null" entityname="A" />
            </filter>
        </filter>
        <link-entity name="B" to="a_id" from="b_one_id" link-type="outer" alias="connectionB">
            <filter type="and">
                <condition attribute="b_two_id" operator="eq" value="1" />
            </filter>
        </link-entity>
        <link-entity name="C" to="a_id" from="c_one_id" link-type="outer" alias="connectionC">
            <filter type="and">
                <condition attribute="c_two_id" operator="eq" value="2" />
            </filter>
        </link-entity>
    </entity>
</fetch>


我希望您的代码中有一些编程错误。
看看你的代码部分

query.AddLink(B.EntityLogicalName, "a_id", "b_one_id", JoinOperator.LeftOuter);
query.LinkEntities[0].EntityAlias = "connectionB";
query.LinkEntities[0].LinkCriteria.AddCondition("b_two_id", ConditionOperator.Equal, 1);

query.AddLink(C.EntityLogicalName, "a_id", "c_one_id", JoinOperator.LeftOuter);
query.LinkEntities[0].EntityAlias = "connectionC";
query.LinkEntities[0].LinkCriteria.AddCondition("c_two_id", ConditionOperator.Equal, 2);
您正在添加query.AddLink()并再次向查询添加其他链接 但对别名和LinkCriteria使用相同的链接ie query.LinkEntities[0]。
也许纠正这个错误可以解决您的问题。

刚刚尝试过,对我来说效果很好-得到3行。您是否可以尝试在没有任何筛选器的情况下运行,并查看您运行的数据是否正确(我得到6行没有筛选器的数据:4行a_id=1,1行a_id=2,1行a_id=3)?您好,这是crm 2011还是crm 2013?三明治卷?如果这是crm 2011
外部连接
的工作方式:如果您将关系链接到
外部
,您将检索
所有记录
,即使它们与您的条件不匹配。