2015-11-20 61 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

我记得(需要确认)如果我们改变了一个选项集的整数值,实体记录中的现有值就变得无效了。换句话说,这不会是一个级联的变化。另一方面,由于拼写错误或名称增强等原因,名称值更可能发生更改。 个人而言,我觉得在代码中使用名称值来执行任务不是一种好方法。 –