C# 是否筛选具有类型实体引用的实体?
如何使用实体引用对象的字符串值进行查询C# 是否筛选具有类型实体引用的实体?,c#,dynamics-crm,C#,Dynamics Crm,如何使用实体引用对象的字符串值进行查询 QueryExpression query = new QueryExpression("entityName"); query.Criteria = new FilterExpression(); query.Criteria.AddCondition("parentaccountid", ConditionOperator.Like, "14%"); 这里的“parentaccountid”基本上是entityreference类型 EntityCo
QueryExpression query = new QueryExpression("entityName");
query.Criteria = new FilterExpression();
query.Criteria.AddCondition("parentaccountid", ConditionOperator.Like, "14%");
这里的“parentaccountid”基本上是entityreference类型
EntityCollection results = crmService.RetrieveMultiple(query);
当我尝试获取结果时,我收到无法强制转换的错误&它需要GUID
query.Criteria.AddCondition("parentaccountid", ConditionOperator.Like, "14%");
我知道这可能不可能,但我可能还是错了。
是否有其他方法可以使用实体引用对象的字符串进行查询
QueryExpression query = new QueryExpression("entityName");
query.Criteria = new FilterExpression();
query.Criteria.AddCondition("parentaccountid", ConditionOperator.Like, "14%");
其他信息:
有一个实体“Opportunity”,它有几个名为name、orderamount、parentaccountid等属性
应用过滤器后,我按如下方式呼叫服务:
QueryExpression query = new QueryExpression("opportunity");
query.Criteria = new FilterExpression();
query.Criteria.AddCondition("name", ConditionOperator.Like, "14%");
FilterExpression childFilter = query.Criteria.AddFilter(LogicalOperator.Or);
childFilter.AddCondition("tmeic_proposalnumber", ConditionOperator.Equal, "XXXXXX");
EntityCollection results = crmService.RetrieveMultiple(query);
我将结果分配如下:
DataTable dt = new DataTable();
dt.Columns.Add("CustomerName");
try
{
foreach (Entity item in results.Entities)
{
DataRow dr = dt.NewRow();
dr["CustomerName"] = item.Contains("parentaccountid") ? item.GetAttributeValue<EntityReference>("parentaccountid").Name : string.Empty;
dt.Rows.Add(dr);
}
}
现在,我想使用客户名称进行搜索
但当我添加下面的过滤器时,它会抛出错误,因为它需要GUID
query.Criteria.AddCondition("parentaccountid", ConditionOperator.Like, "14%");
我为客户名称分配了GetAttributeValue(“parentaccountid”).Name。我的搜索参数是name only,因为我在datagridview而不是guid中显示name
但是在QueryExpression中,它要求GUI。我如何做到这一点
您能否通过添加类型为EntityReferences的筛选器来提供我们查询的任何链接?结果是从datagridview绑定的?虽然我们似乎运气不佳,无法让“like”操作符动态比较字符串和GUID,但至少有两种可能的解决方法:
public partial class GetGuid : BaseWorkflow
{
[Output("Entity Id")]
public OutArgument<string> EntityId { get; set; }
protected override void ExecuteInternal(LocalWorkflowContext context)
{
EntityId.Set(context.CodeActivityContext, context.WorkflowContext.PrimaryEntityId.ToString());
}
}
公共部分类GetGuid:BaseWorkflow
{
[输出(“实体Id”)]
公共OutArgument EntityId{get;set;}
受保护的重写void ExecuteInternal(LocalWorkflowContext上下文)
{
Set(context.CodeActivityContext,context.WorkflowContext.PrimaryEntityId.ToString());
}
}
还请注意,虽然“like”运算符不适用于GUID,“大于”和“小于”do,但类似的操作也适用于:
<fetch>
<entity name="account" >
<attribute name="accountid" />
<attribute name="name" />
<filter type="and" >
<condition attribute="accountid" operator="gt" value="14000000-0000-0000-0000-000000000000" />
</filter>
</entity>
</fetch>
虽然让“like”操作符将字符串与GUID进行动态比较似乎运气不佳,但至少有两种可能的解决方法:
public partial class GetGuid : BaseWorkflow
{
[Output("Entity Id")]
public OutArgument<string> EntityId { get; set; }
protected override void ExecuteInternal(LocalWorkflowContext context)
{
EntityId.Set(context.CodeActivityContext, context.WorkflowContext.PrimaryEntityId.ToString());
}
}
公共部分类GetGuid:BaseWorkflow
{
[输出(“实体Id”)]
公共OutArgument EntityId{get;set;}
受保护的重写void ExecuteInternal(LocalWorkflowContext上下文)
{
Set(context.CodeActivityContext,context.WorkflowContext.PrimaryEntityId.ToString());
}
}
还请注意,虽然“like”运算符不适用于GUID,“大于”和“小于”do,但类似的操作也适用于:
<fetch>
<entity name="account" >
<attribute name="accountid" />
<attribute name="name" />
<filter type="and" >
<condition attribute="accountid" operator="gt" value="14000000-0000-0000-0000-000000000000" />
</filter>
</entity>
</fetch>
您需要筛选关联的
账户
实体的名称
属性
将账户
实体加入商机
实体,并对其应用条件表达式
,如下所示:
var query = new QueryExpression("opportunity");
LinkEntity link = query.AddLink("account", "parentaccountid", "accountid");
link.AddCondition("name", ConditionOperator.BeginsWith, "14");
您需要对关联的
账户
实体的名称
属性进行筛选
将账户
实体加入商机
实体,并对其应用条件表达式
,如下所示:
var query = new QueryExpression("opportunity");
LinkEntity link = query.AddLink("account", "parentaccountid", "accountid");
link.AddCondition("name", ConditionOperator.BeginsWith, "14");
parentaccountid是一个 LinkEntity只能应用于其他实体 过滤的简单方法是在属性末尾添加名称
query.Criteria.AddCondition("parentaccountidname", ConditionOperator.Like, "%In%");
多亏了Dave,请参见此处,了解parentaccountid是一个 LinkEntity只能应用于其他实体 过滤的简单方法是在属性末尾添加名称
query.Criteria.AddCondition("parentaccountidname", ConditionOperator.Like, "%In%");
多亏了Dave,请参见此处了解您能否解释在什么情况下需要对Guid密钥的一部分进行过滤?guid本身没有任何意义,应该具有相当随机的值。也许可以用另一种方式满足您的需求?您能解释一下在什么情况下需要对Guid键的某个部分进行过滤吗?guid本身没有任何意义,应该具有相当随机的值。也许你的要求可以通过另一种方式得到满足?谢谢你的解决方案,但是有一点误解。事实上,我的意思是另一个问题。我已经为这个问题添加了额外的细节。谢谢你的解决方案,但是有一点误解。事实上,我的意思是另一个问题。我在问题中添加了额外的细节。这不符合要求,因为属性accountid同时位于account entity和opportunity entity中。opportunity具有属性accountid和parentaccountid。这不符合要求,因为属性accountid同时位于帐户实体和opportunity实体中。opportunity具有accountid和parentaccountid属性。