我正在使用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>();
}
答案 0 :(得分:3)
前提:我赞成这个问题,因为它非常有趣(我喜欢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
(这是因为这种关系不仅包含营销列表与广告系列之间的关系,还包含广告系列与产品及其他广告之间的关系。