C# 如何使用Dynamics CRM SDK搜索lead或account?

C# 如何使用Dynamics CRM SDK搜索lead或account?,c#,dynamics-crm,dynamics-crm-online,C#,Dynamics Crm,Dynamics Crm Online,是否有人可以提供一个示例代码,用于在CRM SDK中通过电子邮件检索潜在客户?有没有像这样工作的内置函数 Guid leadID = someLeadManager.GetByEmail(email); 是否要检索具有特定邮件的潜在客户?在这种情况下,可以做类似的事情 private EntityCollection GetLeadsWithEmail( IOrganizationService service, String wantedEmailAddress) { QueryEx

是否有人可以提供一个示例代码,用于在CRM SDK中通过电子邮件检索潜在客户?有没有像这样工作的内置函数

Guid leadID = someLeadManager.GetByEmail(email);

是否要检索具有特定邮件的潜在客户?在这种情况下,可以做类似的事情

private EntityCollection GetLeadsWithEmail(
  IOrganizationService service, String wantedEmailAddress)
{
  QueryExpression query = new QueryExpression();
  query.EntityName = "lead";
  // the columns you want
  query.ColumnSet = new ColumnSet() { AllColumns = true };

  query.Criteria = new FilterExpression();
  query.Criteria.FilterOperator = LogicalOperator.And;
  query.Criteria.Conditions.Add(new ConditionExpression(
    "emailaddress1", ConditionOperator.Equal, wantedEmailAddress));
  return service.RetrieveMultiple(query);
}
这将检索在其emailaddress1字段中具有wantedEmailAddress的所有潜在客户。 然后,您可以检查在您调用它的地方是否有匹配项

EntityCollection leadCollection = GetLeadsWithEmail(
  service, "someone@example.com");
Entity entity = leadCollection[0];
您可能应该首先使用
leadCollection.entities.Count检查集合中的实体数,然后从那里继续


从MSDN。

假设您已获得服务,则可以执行以下查询

private Guid GetGuidByEmail(String email)
{
  QueryExpression query = new QueryExpression
  {
    EntityName = "lead",
    ColumnSet = new ColumnSet("emailaddress1"),
    Criteria = new FilterExpression
    {
      Filters =
      {
        new FilterExpression
        {
          Conditions =
          {
            new ConditionExpression(
              "emailaddress1", ConditionOperator.Equals, email)
          }
        }
      }
    }
  };

  Entity entity = service.RetrieveMultiple(query).Entities.FirstOrDefault();
  if(entity != null)
    return entity.Id;
  return Guid.Empty;
}
现在,如果您需要筛选电子邮件的部分的匹配项,则查询会变短,相反,您可以像这样使用LINQ进行选择

private IEnumerable<Guid> GetGuidsByEmail(String email)
{
  QueryExpression query = new QueryExpression
  {
    EntityName = "lead",
    ColumnSet = new ColumnSet("emailaddress1")
  };
  IEnumerable<Entity> entities = service.RetrieveMultiple(query).Entities;

  return entities
    .Where(element => element.Contains("emailaddress1"))
      .Where(element => Regex.IsMatch(element["emailaddress1"], email))
        .Select(element => element.Id);
}
private IEnumerable GetGuidsByEmail(字符串电子邮件)
{
QueryExpression query=新建QueryExpression
{
EntityName=“lead”,
ColumnSet=新的ColumnSet(“emailaddress1”)
};
IEnumerable entities=service.RetrieveMultiple(query).entities;
返回实体
.Where(element=>element.Contains(“emailaddress1”))
.Where(element=>Regex.IsMatch(element[“emailaddress1”],email))
.Select(element=>element.Id);
}

用于检索实体的电子邮件值是完整准确的地址,还是您需要使用匹配?我只需要准确的地址,但thx非常适合提供筛选电子邮件部分匹配的详细信息。+1用于查询表达式和模块化。但是,他应该使用LINQ和foreach来确保即使是第0个元素也不会使他的执行崩溃。如果逻辑运算符只有一个条件,那么似乎没有必要使用它。不建议获取所有列(我犯了一个错误,因为这个原因,我忘了检查缺少的值)。