有没有办法可以为CRM插件编写派生查询? 这里有关于CRM的新手。
查询如下所示:
SELECT * FROM table1
WHERE table1.ID1 = XXXX AND table1.ID2 NOT IN (
SELECT table2.ID1
FROM table2
WHERE table2.ID2 = XXXX)
使用queryexpression编写代码。
答案 0 :(得分:0)
不幸的是,这些复杂的SQL查询无法通过fetchxml或queryexpression查询实现。特别喜欢Subqueries,Not In scenario。
可能你需要多个结果集(EntityCollection),一个用于table1&另一个用于table2,然后横穿它。
另一个选择是LINQ queries,你可以试试。
另外,您可以vote this idea来提高查询能力。
答案 1 :(得分:0)
如果您确实使用的是CRM 2011,我上次检查时,这是不可能的,较新版本(2013+)您可以执行此类查询。 请参阅此文章:https://msdn.microsoft.com/en-us/library/dn481591.aspx?f=255&MSPPError=-2147217396
{{1}}
答案 2 :(得分: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。