2014-10-17 80 views
0

我们正试图查询自定义实体的集合CRM 2011年,使用的createQuery:在CRM中创建自定义实体的名称查询2011

var queryActivatedProducts = 
    from c in svcContext.CreateQuery("mur_activatedproducts") 
    where ((string)c["mur_activatedproduct"]).Contains("Feature") 
    select new 
    { 
     accountname = c.Attributes["mur_activatedproduct"], 
    }; 

foreach (var c in queryActivatedProducts) 
{ 
    Debug.WriteLine("" + c.accountname); 
} 

上面的代码是由微软直接采取一个示例的变化: http://msdn.microsoft.com/en-us/library/gg334415.aspx

我们收到以下异常:试图输入值“%功能%”转换为属性“mur_activatedproducts.mur_activatedproduct”

异常System.FormatException被抛出。预期的属性值类型:System.Guid。引发异常:Guid应该包含32个数字,并且有4个破折号(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。

为什么要在这里要求GUID?如果我们按照微软的例子,看起来这是我们想要输入我们查询的属性的字符串值的地方。我们尝试用我们正在搜索的实体的值创建一个新的GUID对象,并将其放在这里,但是这也失败了。任何建议,非常感谢!

+2

该字段mur_activatedproduct.mur_activatedproduct的CRM中的数据类型是什么?我不认为这是一个字符串,我认为这很可能是一个查找 - 这就是为什么唯一有效的搜索标准是一个Guid。 – Nicknow 2014-10-17 20:41:05

回答

0

该例外是由于字段mur_activatedproduct的数据类型。看起来这是CRM中的查找,因此是EntityReference而不是字符串。

如果你想通过这个字段,你必须定义为EntityReference,并过滤通过对其进行过滤

EntityReference er = new EntityReference("<entityLogicalName>", new Guid("<recordGuid>")); // your entityreference 
var queryActivatedProducts = from c in ctx.CreateQuery("mur_activatedproducts") 
              where ((EntityReference)c["mur_activatedproduct"]) == er 
              select new 
              { 
               accountname = c.Attributes["mur_activatedproduct"], 
              }; 

如果您想使用此过滤器where ((string)c["mur_activatedproduct"]).Contains("Feature")你有一个替换场mur_activatedproduct是单CRM中的文本行。

相关问题