在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对象,并将其放置在此处,但也失败了。非常感谢您的任何建议!
异常是由于字段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中的"单行文本"。