ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.CIM Namespace / CIMExpressionInfo Class
Members Example Version

CIMExpressionInfo Class
Represents the properties required for authoring an Arcade expression.
Object Model
CIMExpressionInfo ClassCIMExpressionInfo ClassCIMExpressionInfo Class
Syntax
Example
Basic Query
//Consult https://github.com/Esri/arcade-expressions/ and
//https://developers.arcgis.com/arcade/ for more examples
//and arcade reference

QueuedTask.Run(() =>
{
  //construct an expression
  var query = @"Count($layer)";//count of features in "layer"

  //construct a CIMExpressionInfo
  var arcade_expr = new CIMExpressionInfo()
  {
    Expression = query.ToString(),
    //Return type can be string, numeric, or default
    //When set to default, addin is responsible for determining
    //the return type
    ReturnType = ExpressionReturnType.Default
  };

  //Construct an evaluator
  //select the relevant profile - it must support Pro and it must
  //contain any profile variables you are using in your expression.
  //Consult: https://developers.arcgis.com/arcade/profiles/
  using (var arcade = ArcadeScriptEngine.Instance.CreateEvaluator(
                          arcade_expr, ArcadeProfile.Popups))
  {
    //Provision  values for any profile variables referenced...
    //in our case '$layer'
    var variables = new List<KeyValuePair<string, object>>() {
        new KeyValuePair<string, object>("$layer", featLayer)
      };
    //evaluate the expression
    try
    {
      var result = arcade.Evaluate(variables).GetResult();
      System.Diagnostics.Debug.WriteLine($"Result: {result.ToString()}");
    }
    //handle any exceptions
    catch (InvalidProfileVariableException ipe)
    {
      //something wrong with the profile variable specified
      //TODO...
    }
    catch (EvaluationException ee)
    {
      //something wrong with the query evaluation
      //TODO...
    }

  }
});
Basic Query using Features
//Consult https://github.com/Esri/arcade-expressions/ and
//https://developers.arcgis.com/arcade/ for more examples
//and arcade reference

QueuedTask.Run(() =>
{
  //construct an expression
  var query = @"$feature.AreaInAcres * 43560.0";//convert acres to ft 2

  //construct a CIMExpressionInfo
  var arcade_expr = new CIMExpressionInfo()
  {
    Expression = query.ToString(),
    //Return type can be string, numeric, or default
    //When set to default, addin is responsible for determining
    //the return type
    ReturnType = ExpressionReturnType.Default
  };

  //Construct an evaluator
  //select the relevant profile - it must support Pro and it must
  //contain any profile variables you are using in your expression.
  //Consult: https://developers.arcgis.com/arcade/profiles/
  using (var arcade = ArcadeScriptEngine.Instance.CreateEvaluator(
                          arcade_expr, ArcadeProfile.Popups))
  {
    //we are evaluating the expression against all features
    using (var rc = featLayer.Search())
    {

      while (rc.MoveNext())
      {
        //Provision  values for any profile variables referenced...
        //in our case '$feature'
        var variables = new List<KeyValuePair<string, object>>() {
          new KeyValuePair<string, object>("$feature", rc.Current)
        };
        //evaluate the expression (per feature in this case)
        try
        {
          var result = arcade.Evaluate(variables).GetResult();
          var val = ((double)result).ToString("0.0#");
          System.Diagnostics.Debug.WriteLine(
            $"{rc.Current.GetObjectID()} area: {val} ft2");
        }
        //handle any exceptions
        catch (InvalidProfileVariableException ipe)
        {
          //something wrong with the profile variable specified
          //TODO...
        }
        catch (EvaluationException ee)
        {
          //something wrong with the query evaluation
          //TODO...
        }
      }
    }
  }
});
Modify renderer using Arcade
var lyr = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault(f => f.ShapeType == esriGeometryType.esriGeometryPolygon);
if (lyr == null) return;
QueuedTask.Run(() =>
{
  // GetRenderer from Layer (assumes it is a unique value renderer)
  var uvRenderer = lyr.GetRenderer() as CIMUniqueValueRenderer;
  if (uvRenderer == null) return;
  //layer has STATE_NAME field
  //community sample Data\Admin\AdminSample.aprx
  string expression = "if ($view.scale > 21000000) { return $feature.STATE_NAME } else { return 'All' }";
  CIMExpressionInfo updatedExpressionInfo = new CIMExpressionInfo
  {
    Expression = expression,
    Title = "Custom" // can be any string used for UI purpose.
  };
  //set the renderer's expression
  uvRenderer.ValueExpressionInfo = updatedExpressionInfo;

  //SetRenderer on Layer
  lyr.SetRenderer(uvRenderer);
});
Inheritance Hierarchy

System.Object
   ArcGIS.Core.CIM.CIMObject
      ArcGIS.Core.CIM.CIMExpressionInfo

Requirements

Target Platforms: Windows 11, Windows 10

ArcGIS Pro version: 3 or higher.
See Also