在CRM 2011中创建具有自定义实体名称的查询

本文关键字:实体 查询 自定义 2011 CRM 创建 | 更新日期: 2023-09-27 18:26:52

我们正在尝试使用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);
}

上面的代码是对直接从Microsoft获得的示例的修改:http://msdn.microsoft.com/en-us/library/gg334415.aspx

我们收到以下异常:

尝试将输入值"%Feature%"转换为属性"mur_activedproducts.mur_activeDProduct"时引发异常System.FormatException。所需的属性值类型:System.Guid。引发的异常:Guid应包含32位数字和4个破折号(xxxxxxxx-xxxx-xxxx.xxxx-xxxxxxxxxxxxx)。

为什么它在这里要求GUID?如果我们以微软为例,我们似乎希望在这里输入正在查询的属性的字符串值。我们尝试使用正在搜索的实体的值创建一个新的GUID对象,并将其放置在此处,但也失败了。非常感谢您的任何建议!

在CRM 2011中创建具有自定义实体名称的查询

异常是由于字段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中的"单行文本"。