Dynamics crm 2011 如何使用QueryExpression对象获取营销列表的成员?

Dynamics crm 2011 如何使用QueryExpression对象获取营销列表的成员?,dynamics-crm-2011,query-expressions,Dynamics Crm 2011,Query Expressions,我经常使用QueryExpression,但到目前为止,从那个里得到这个或把这个放到那个里是一个很大的进步。最近,我了解到有一种叫做LinkedEntity的东西,我开始寻找它。作为一个例子,我受到了一个相关问题的启发,于是我开始创建一个表达式,以获取给定guid的列表的所有成员 不过,我发现的所有示例都遵循相同的模式——如图所示。从中,我了解到这是一种过时的方法(CRM 4.0)。我没能创建一个更新的示例,我不知道如何设计链接 有人愿意提供一个示例代码吗 Guid=。。。; QueryExpr

我经常使用QueryExpression,但到目前为止,从那个里得到这个或把这个放到那个里是一个很大的进步。最近,我了解到有一种叫做LinkedEntity的东西,我开始寻找它。作为一个例子,我受到了一个相关问题的启发,于是我开始创建一个表达式,以获取给定guid的列表的所有成员

不过,我发现的所有示例都遵循相同的模式——如图所示。从中,我了解到这是一种过时的方法(CRM 4.0)。我没能创建一个更新的示例,我不知道如何设计链接

有人愿意提供一个示例代码吗

Guid=。。。;
QueryExpression请求=新建QueryExpression
{
EntityName=“帐户”,
ColumnSet=新的ColumnSet(真),
LinkEntities=???,//如何正确链接实体?
Criteria=new FilterExpression{???}//如何仅筛选*guid*?
};
我创建了一个链接两个实体的提取XML,但不清楚如何将其转换为QueryExpression实体。我有类似的东西。有什么建议吗

LinkEntity linkListToMember=新的LinkEntity(
“列表”、“列表成员”、“列表ID”、“列表ID”、JoinOperator.Natural);
LinkEntity linkMemberToContact=新的LinkEntity(
“listmember”、“account”、“entityid”、“accountid”、JoinOperator.Natural);

链接实体用作SQL连接。将构造函数与from和to实体及属性名称一起使用

公共链接(
string linkFromEntityName,//这是查询表达式或父LinkEntity的实体逻辑名称
字符串linkToEntityName,//这是要链接到的实体的实体逻辑名称
string linkFromAttributeName,//这是from实体上的属性名,包含联接键
string linkToAttributeName,//这是to实体上的属性名,包含连接键
JoinOperator(JoinOperator)//这是您要执行的联接类型
使用链接实体,可以添加链接条件以过滤返回的结果。您还可以添加列并从相关实体返回数据

编辑,康拉德答案的补充 如果Konrad列出的52行代码看起来太冗长,那么这将使用定义的扩展方法在15行中完成同样的事情

Guid=。。。;
组织服务;
QueryExpression请求=新的QueryExpression(“帐户”)
{
ColumnSet=新列集(“名称”、“区域”),
};
request.Criteria.AddCondition(“name”,ConditionOperator.NotNull);
request.Criteria.AddCondition(“region”,ConditionOperator.NotNull);
var listLink=request.AddLink(“listmember”、“accountid”、“entityid”)。
AddChildLink(“列表”、“列表ID”);
listLink.Columns.AddColumn(“listname”);
listLink.LinkCriteria.AddCondition(“listid”,ConditionOperator.Equal,guid);

链接实体用作SQL连接。将构造函数与from和to实体及属性名称一起使用

公共链接(
string linkFromEntityName,//这是查询表达式或父LinkEntity的实体逻辑名称
字符串linkToEntityName,//这是要链接到的实体的实体逻辑名称
string linkFromAttributeName,//这是from实体上的属性名,包含联接键
string linkToAttributeName,//这是to实体上的属性名,包含连接键
JoinOperator(JoinOperator)//这是您要执行的联接类型
使用链接实体,可以添加链接条件以过滤返回的结果。您还可以添加列并从相关实体返回数据

编辑,康拉德答案的补充 如果Konrad列出的52行代码看起来太冗长,那么这将使用定义的扩展方法在15行中完成同样的事情

Guid=。。。;
组织服务;
QueryExpression请求=新的QueryExpression(“帐户”)
{
ColumnSet=新列集(“名称”、“区域”),
};
request.Criteria.AddCondition(“name”,ConditionOperator.NotNull);
request.Criteria.AddCondition(“region”,ConditionOperator.NotNull);
var listLink=request.AddLink(“listmember”、“accountid”、“entityid”)。
AddChildLink(“列表”、“列表ID”);
listLink.Columns.AddColumn(“listname”);
listLink.LinkCriteria.AddCondition(“listid”,ConditionOperator.Equal,guid);

这里有一种方法,可以获取市场营销列表的所有成员,前提是您有它的guid和服务器连接。你对这些条件所做的是正确的,但是你需要把一个顶进另一个。周六我会在我的博客上对它进行更详细的描述

Guid=。。。;
组织服务;
QueryExpression请求=新建QueryExpression
{
EntityName=“帐户”,
ColumnSet=新列集(“名称”、“区域”),
联系=
{
新联系
{ 
JoinOperator=JoinOperator.Inner,
LinkFromEntityName=“帐户”,
LinkFromAttributeName=“accountid”,
LinkToEntityName=“listmember”,
LinkToAttributeName=“entityid”,
LinkCriteria={},
联系=
{
新联系
{
JoinOperator=JoinOperator.Inner,
Columns=新列集(“listname”),
EntityAlias=“MarketingList”,
LinkFromEntityName=“listmember”,
LinkFromAttributeName=“listid”,
LinkToEntityName=“列表”,
LinkToAttributeName=“listid”,
LinkCriteria={条件=
{
新的ConditionExpression(“listid”,ConditionOperator.Equal,guid)
} }
}
}
} 
},
条件=新筛选器表达式
{
过滤器=
{
新过滤器表达式
{
FilterOperator=逻辑运算符。和,
条件=
{
新条件表达式(