2015-11-20 18 views
1

這是我在FetchXML的FetchXML屬性的屬性...拼搶使用過濾器

<fetch version="1.0" mapping="logical"> 
    <entity name="cs_testparameter" > 
     <attribute name="cs_testcalculation" /> 
    </entity> 
</fetch> 

其返回如下:

<resultset morerecords="0"> 
    <result> 
    <cs_testcalculation name="Addition" formattedvalue="717640000">717640000</cs_testcalculation> 
    </result> 
    <result> 
    <cs_testcalculation name="Subtraction" formattedvalue="717640001">717640001</cs_testcalculation> 
    </result> 
    <result> 
    <cs_testcalculation name="Multiplication" formattedvalue="717640002">717640002</cs_testcalculation> 
    </result> 
    <result> 
    <cs_testcalculation name="Division" formattedvalue="717640003">717640003</cs_testcalculation> 
    </result> 
</resultset> 

我想我的篩選結果,因此它只返回TestParameter例如,testCalculation屬性名稱等於Addition的實體。我將如何做到這一點?

我知道我可以使用過濾用數字值...

<fetch version="1.0" mapping="logical"> 
    <entity name="cs_testparameter" > 
     <attribute name="cs_testcalculation" /> 
     <filter type="and"> 
      <condition attribute="cs_testcalculation" operator="eq" value="717640000" /> 
     </filter> 
    </entity> 
</fetch> 

...但我寧可不使用數值,但是,從名字本身,而過濾。這可能嗎?


編輯:最後,我將使用該做這樣的事情......

string fetchQuery = @"--my fetchXML here...--"; 
FetchExpression fetchTestParameters = new FetchExpression(fetchQuery); 
EntityCollection testParameters = context.RetrieveMultiple(fetchTestParameters); 

foreach (var testParameter in testParameters.Entities) 
{ 
    switch (testParameter.cs_testcalculation["name"]) 
    { 
     case "Addition": 
     //do something... 
     case "Subtraction": 
     //do something else... 
     ... 
    } 
} 
+0

你如何執行你的fetxml?使用retrievemultiple將始終爲您提供results集合,其中retrieve將返回您真正想要的實體xml實體。 –

+0

我不知道使用optionset名稱值獲取結果的任何方式,但是如果您解釋了您爲什麼要使用optionset名稱值獲取結果的目標?任何人都可以爲此提出解決方法。 –

+0

@Shane_Yo我正在使用RetrieveMultiple – kei

回答

1

Aswering您最近編輯:

你只是使用枚舉使代碼更具可讀性和可伸縮性,但實質上你是比較數字。正確的答案將是「這是不可能的」但您的方法來處理這是正確

其他的方法來使這是使用FormattedValues至極讓你問的名稱,而不是價值。

後期綁定代碼:

entity.FormattedValues["cs_TestCalculation"] 

entity.GetFormattedAttributeValue["cs_TestCalculation"] 
1

我已經找到了解決方法我在做什麼:

  • 我的FetchXML仍然是一樣的

  • 我已經生成了th使用crmsvcutil選項集電子枚舉並將其添加到我的項目

  • foreach現在看起來像:


foreach (var testParameter in testParameters.Entities) 
{ 
    switch (((cs_testparameter) testParameter).cs_TestCalculation.Value) 
    { 
     case (int)cs_testcalculation.Addition: 
     //do something... 
     case (int)cs_testcalculation.Subtraction: 
     //do something else... 
     ... 
    } 
} 
+0

這很好。但我只是想知道爲什麼你不使用swtich ... case語句中的選項集整數值(硬編碼),而不是這麼長的解決方法? –

+0

@AliLee對於接管代碼的人來說,整數值是沒有意義的。這些值也可能完全改變。如果有變化,最好更新早期綁定類型和選項集合類,而不是主代碼。 – kei

+0

我記得(需要確認)如果我們改變了一個選項集的整數值,實體記錄中的現有值就變得無效了。換句話說,這不會是一個級聯的變化。另一方面,由於拼寫錯誤或名稱增強等原因,名稱值更可能發生更改。 個人而言,我覺得在代碼中使用名稱值來執行任務不是一種好方法。 –