我正在使用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"];


现在的解释是:

如您所知listcampaign通过N:N关系连接,首先要做的是找到关系名称,在CRM内部,它位于关系属性下,在这种情况下为campaignitem

第二件事是找到关系的外键名称,通常它们是entitynameid(因此可以期望listidcampaignid),但在这种情况下不是。而不是listid,我们有了entityid(这是因为这种关系不仅包含营销列表和营销活动之间的关系,还包含营销活动与产品以及其他产品之间的关系。

关于c# - 如何将LINQ查询限制为给定营销事件的营销列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30370479/

10-16 05:57