我正在使用LINQ查询CRM,在下面您可以看到我已经拥有的东西。目标是将查询限制为附加到给定市场活动的营销列表。如何在LINQ中进行此操作(具有后期绑定)?
List<Guid> GetLists(OrganizationServiceContext context, Guid campaign)
{
var lists =
from list in context.CreateQuery("list")
where /* list is attached to campaign */
select (Guid)list["listid"];
return lists.ToList<Guid>();
}
最佳答案
前提:我赞成这个问题,因为它非常有趣(我喜欢LINQ反对后期绑定),并且涉及的实体不那么容易被查询。
首先是代码:
var lists = from list in context.CreateQuery("list")
join campaignlist in context.CreateQuery("campaignitem") on list["listid"] equals campaignlist["entityid"]
join campaign in context.CreateQuery("campaign") on campaignlist["campaignid"] equals campaign["campaignid"]
where (Guid)campaign["campaignid"] == campaignId
select (Guid)list["listid"];
现在的解释是:
如您所知
list
和campaign
通过N:N关系连接,首先要做的是找到关系名称,在CRM内部,它位于关系属性下,在这种情况下为campaignitem
。第二件事是找到关系的外键名称,通常它们是
entitynameid
(因此可以期望listid
和campaignid
),但在这种情况下不是。而不是listid
,我们有了entityid
(这是因为这种关系不仅包含营销列表和营销活动之间的关系,还包含营销活动与产品以及其他产品之间的关系。关于c# - 如何将LINQ查询限制为给定营销事件的营销列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30370479/