1

有没有办法可以为 CRM 插件编写派生查询?CRM 开发新手在这里。

查询如下所示:

SELECT * FROM table1 
WHERE table1.ID1 = XXXX AND table1.ID2 NOT IN (
    SELECT table2.ID1
    FROM table2 
    WHERE table2.ID2 = XXXX)

使用查询表达式编写代码。

4

3 回答 3

0

您可以将此表达式与LINQ for CRM一起使用:

OrganizationServiceContext oservice = new OrganizationServiceContext(service);

using (oservice)
{
    var query = (from table1 in oservice.CreateQuery("new_table1")
                 join table2 in oservice.CreateQuery("new_table2") on table1["new_table1id"]
                     equals table2["new_table2id"]
                 where
                     table1.GetAttributeValue<EntityReference>("new_id1") 
                     == new Guid("the equal guid or field")
                 where
                     table2.GetAttributeValue<EntityReference>("new_id2").Id
                     != table1.GetAttributeValue<EntityReference>("new_id1").Id
                     && table2.GetAttributeValue<EntityReference>("new_id2").Id 
                     == new Guid("the not equal guid or field")
                 select table1).ToList();
}

这是 QueryExpression 的另一种方式。oservice.CreateQuery("new_table1")是您在 CRM 中的实体名称

这也适用于 CRM 2011。

于 2018-02-07T13:38:14.213 回答
0

如果您真的在使用 CRM 2011,上次我检查过,这是不可能的,较新的版本(2013+)您可以执行此类查询。请看这篇文章:https ://msdn.microsoft.com/en-us/library/dn481591.aspx?f=255&MSPPError=-2147217396

var qe = new QueryExpression("table1");

var link = qe.AddLink("table2", "id2", "id1", JoinOperator.LeftOuter);
link.LinkCriteria.AddCondition("id2", ConditionOperator.Equal "XXXX")
link.EntityAlias = "notIn";

qe.Criteria = new FilterExpression();
qe.Criteria.AddCondition("id1", ConditionOperator.Equal, "XXXX");
qe.Criteria.AddCondition("notIn", "id1", ConditionOperator.Null);
于 2018-02-07T13:25:22.760 回答
0

不幸的是,这些复杂的 sql 查询无法通过 fetchxml 或 queryexpression 查询来实现。特别是像子查询,不在场景中。

可能您需要多个结果集(EntityCollection),一个用于 table1,另一个用于 table2,然后遍历它。

另一个选择是LINQ 查询,你可以试试。

在旁注中,您可以投票这个想法以提高查询能力。

于 2018-02-05T03:41:57.320 回答