Collection Activities in WF

This topic applies to Windows Workflow Foundation 4 (WF4).

Collection activities are used to work with collection objects in a workflow. .NET Framework version 4 has system-provided activities for adding and removing items from a collection, testing for the existence of an item in a collection, and clearing a collection. ExistsInCollection and RemoveFromCollection have an OutArgument of type Boolean, which indicates the result.

Ee358729.Important(en-us,VS.100).gif Note:
If a collection activity is executed before setting the underlying collection object, an InvalidOperationException is thrown and the activity faults.

Collection activities

AddToCollection

Adds an item to a specified collection.

ClearCollection

Clears all items from a specified collection.

ExistsInCollection

Returns true if an item exists in a collection.

RemoveFromCollection

Removes an item from a specified collection and returns true if the item was successfully removed.

Using collection activities

The following code example demonstrates how to interact with a collection declared as a workflow variable. The collection used is a List of String objects named fruitList.

Variable<ICollection<string>> fruitList = new Variable<ICollection<string>>
{
    Default = new VisualBasicValue<ICollection<string>>("New List(Of String) From {\"Apple\", \"Orange\"}"),
    Name = "FruitList"
};

Variable<bool> result = new Variable<bool>
{
    Name = "Result"
};

Activity wf = new Sequence
{
    Variables = { fruitList, result },

    Activities = 
    {
        new If
        {
            Condition = new ExistsInCollection<string>
            {
                Collection = fruitList,
                Item = "Pear"
            },
            Then = new AddToCollection<string>
            {
                Collection = fruitList,
                Item = "Pear"
            },
            Else = new RemoveFromCollection<string>
            {
                Collection = fruitList,
                Item = "Apple"
            }
        },

        new RemoveFromCollection<string>
        {
            Collection = fruitList,
            Item = "Apple",
            Result = result
        },
        new If
        {
            Condition = result,
            Then = new ClearCollection<string>
            {
                Collection = fruitList,
            }
        }
    }
};





















































<Sequence
   xmlns="https://schemas.microsoft.com/netfx/2009/xaml/activities"
   xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"
   xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml">
  <Sequence.Variables>
    <x:Reference>__ReferenceID0</x:Reference>
    <x:Reference>__ReferenceID1</x:Reference>
  </Sequence.Variables>
  <If>
    <If.Condition>
      <InArgument
         x:TypeArguments="x:Boolean">
        <ExistsInCollection
           x:TypeArguments="x:String"
           Item="Pear">
          <ExistsInCollection.Result>
            <OutArgument
               x:TypeArguments="x:Boolean" />
          </ExistsInCollection.Result>
          <InArgument
             x:TypeArguments="scg:ICollection(x:String)">
            <VariableValue
               x:TypeArguments="scg:ICollection(x:String)">
              <VariableValue.Result>
                <OutArgument
                   x:TypeArguments="scg:ICollection(x:String)" />
              </VariableValue.Result>
              <VariableValue.Variable>
                <Variable
                   x:TypeArguments="scg:ICollection(x:String)"
                   x:Name="__ReferenceID0"
                   Default="[New List(Of String) From {&quot;Apple&quot;, &quot;Orange&quot;}]"
                   Name="FruitList" />
              </VariableValue.Variable>
            </VariableValue>
          </InArgument>
        </ExistsInCollection>
      </InArgument>
    </If.Condition>
    <If.Then>
      <AddToCollection
         x:TypeArguments="x:String"
         Item="Pear">
        <InArgument
           x:TypeArguments="scg:ICollection(x:String)">
          <VariableValue
             x:TypeArguments="scg:ICollection(x:String)"
             Variable="{x:Reference __ReferenceID0}">
            <VariableValue.Result>
              <OutArgument
                 x:TypeArguments="scg:ICollection(x:String)" />
            </VariableValue.Result>
          </VariableValue>
        </InArgument>
      </AddToCollection>
    </If.Then>
    <If.Else>
      <RemoveFromCollection
         x:TypeArguments="x:String"
         Item="Apple"
         Result="{x:Null}">
        <InArgument
           x:TypeArguments="scg:ICollection(x:String)">
          <VariableValue
             x:TypeArguments="scg:ICollection(x:String)"
             Variable="{x:Reference __ReferenceID0}">
            <VariableValue.Result>
              <OutArgument
                 x:TypeArguments="scg:ICollection(x:String)" />
            </VariableValue.Result>
          </VariableValue>
        </InArgument>
      </RemoveFromCollection>
    </If.Else>
  </If>
  <RemoveFromCollection
     x:TypeArguments="x:String"
     Item="Apple">
    <RemoveFromCollection.Result>
      <OutArgument
         x:TypeArguments="x:Boolean">
        <VariableReference
           x:TypeArguments="x:Boolean">
          <VariableReference.Result>
            <OutArgument
               x:TypeArguments="Location(x:Boolean)" />
          </VariableReference.Result>
          <VariableReference.Variable>
            <Variable
               x:TypeArguments="x:Boolean"
               x:Name="__ReferenceID1"
               Name="Result" />
          </VariableReference.Variable>
        </VariableReference>
      </OutArgument>
    </RemoveFromCollection.Result>
    <InArgument
       x:TypeArguments="scg:ICollection(x:String)">
      <VariableValue
         x:TypeArguments="scg:ICollection(x:String)"
         Variable="{x:Reference __ReferenceID0}">
        <VariableValue.Result>
          <OutArgument
             x:TypeArguments="scg:ICollection(x:String)" />
        </VariableValue.Result>
      </VariableValue>
    </InArgument>
  </RemoveFromCollection>
  <If>
    <If.Condition>
      <InArgument
         x:TypeArguments="x:Boolean">
        <VariableValue
           x:TypeArguments="x:Boolean"
           Variable="{x:Reference __ReferenceID1}">
          <VariableValue.Result>
            <OutArgument
               x:TypeArguments="x:Boolean" />
          </VariableValue.Result>
        </VariableValue>
      </InArgument>
    </If.Condition>
    <If.Then>
      <ClearCollection
         x:TypeArguments="x:String">
        <InArgument
           x:TypeArguments="scg:ICollection(x:String)">
          <VariableValue
             x:TypeArguments="scg:ICollection(x:String)"
             Variable="{x:Reference __ReferenceID0}">
            <VariableValue.Result>
              <OutArgument
                 x:TypeArguments="scg:ICollection(x:String)" />
            </VariableValue.Result>
          </VariableValue>
        </InArgument>
      </ClearCollection>
    </If.Then>
  </If>
</Sequence>






























See Also

Tasks

Using Collection Activities

Concepts

Authoring Workflows, Activities, and Expressions Using Imperative Code