2014-10-17 99 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中的文本行。

相關問題