如何将LINQ查询限制为给定活动的营销列表



我正在使用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),但在这种情况下不是。我们用entityid代替listid(这是因为这种关系不仅适用于营销列表和活动之间的关系,也适用于活动和产品以及其他关系)。

相关内容

  • 没有找到相关文章

最新更新