使用过滤器在 FetchXML 中获取属性的属性

Grabbing an attribute's attribute in FetchXML using filters

这是我的 FetchXML...

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

其中returns以下:

<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>

我想过滤我的结果,例如 returns TestParametertestCalculation 属性名称等于 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...
      ...
    }
}

我找到了解决方法:

  • 我的 FetchXML 还是一样

  • 我已经使用 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...
      ...
    }
}

回答您最近的编辑:

您只是使用枚举来使代码更具可读性和可扩展性,但本质上您是在比较数字。正确的答案是“这是不可能的”,但是你处理这个问题的方法是正确的

实现此目的的其他方法是使用 FormattedValues,它可以让您询问名称而不是值。

后期绑定码:

entity.FormattedValues["cs_TestCalculation"]

entity.GetFormattedAttributeValue["cs_TestCalculation"]