如何将 LINQ 查询限制为给定活动的营销列表?
How to restrict LINQ query to marketing lists of a given campaign?
我正在使用 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 against late bound)并且所涉及的实体不是那么容易查询。
首先是代码:
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
(这是因为这种关系不仅包含营销列表和活动之间的关系,而且还包含活动和产品之间的关系。
我正在使用 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 against late bound)并且所涉及的实体不是那么容易查询。
首先是代码:
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
(这是因为这种关系不仅包含营销列表和活动之间的关系,而且还包含活动和产品之间的关系。