如何将LINQ查询限制为给定广告系列的营销列表?

时间:2015-05-21 10:00:25

标签: c# linq dynamics-crm-2011

我正在使用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>();
}

1 个答案:

答案 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"];

现在的解释是:

正如您已经知道listcampaign与N:N关系相关联,首先要做的是在关系属性下找到CRM中的关系名称,在这种情况下是campaignitem

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