使用过滤器在 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 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...
...
}
}
我找到了解决方法:
我的 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"]
这是我的 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 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...
...
}
}
我找到了解决方法:
我的 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"]