Freigeben über


LINQ to Objects-Aktivität

Dieses Thema gilt für Windows Workflow Foundation 4.

Dieses Beispiel veranschaulicht, wie eine Aktivität so erstellt wird, dass LINQ to Objects verwendet wird, um Elemente in einer Auflistung abzufragen.

Aktivitätsdetails für FindInCollection

Diese Aktivität ermöglicht Benutzern die Abfrage von Elementen aus Auflistungen im Arbeitsspeicher mit LINQ to Objects. Zum Filtern der Ergebnisse müssen Sie ein LINQ-Prädikat in Form eines Lambda-Ausdrucks bereitstellen. Diese Aktivität kann in Verbindung mit AddToCollection-Aktivitäten verwendet werden.

In der folgenden Tabelle werden die Eigenschaft und die Rückgabewerte für die Aktivität aufgelistet.

Eigenschaft oder Rückgabewert Beschreibung

Collection-Eigenschaft

Eine erforderliche Eigenschaft, die die Quellauflistung angibt.

Predicate-Eigenschaft

Eine erforderliche Eigenschaft, die den Filter für die Auflistung in Form eines Lambda-Ausdrucks angibt.

Rückgabewert

Die gefilterte Auflistung.

Codebeispiel, in dem die benutzerdefinierte Aktivität verwendet wird

Im folgenden Codebeispiel wird die benutzerdefinierte FindInCollection-Aktivität verwendet, um alle Zeilen in einer Auflistung von Mitarbeitern zu suchen, deren Role-Eigenschaft auf Manager und deren Location-Eigenschaft auf Redmond festgelegt ist.

// Find all program managers in Redmond in the employees collection.

Activity wf = new FindInCollection<Employee>
{
    Collections = new LambdaValue<IEnumerable<Employee>>(c => employees),              
    Predicate = new LambdaValue<Func<Employee, bool>>(c => new Func<Employee, bool>(e => e.Role.Equals("Manager") && e.Location.Equals("Redmond")))
};

Im folgenden Code wird gezeigt, wie ein Workflowprogramm erstellt wird, das die benutzerdefinierte FindInCollection-Aktivität, die AddToCollection-Aktivität und die ForEach-Aktivität verwendet, um eine Auflistung mit Mitarbeitern aufzufüllen, alle Mitarbeiter zu suchen, die Entwickler in Redmond sind, und dann die Ergebnisliste zu durchlaufen.

// Create the Linq predicate for the find expression

Func<Employee, bool> predicate = e => e.Role == "DEV" && e.Location.Equals("Redmond");

// Create workflow program
Activity sampleWorkflow = new Sequence
{
    Variables = { employees, devsFromRedmond },
    Activities =
    {
        new Assign<IList<Employee>>
        {
            To = employees,
            Value = new LambdaValue<IList<Employee>>(c => new List<Employee>())
        },
        new AddToCollection<Employee>
        {
            Collection = new InArgument<ICollection<Employee>>(employees),
            Item =  new LambdaValue<Employee>(c => new Employee(1, "Employee 1", "DEV", "Redmond"))
        },
        new AddToCollection<Employee>
        {
            Collection = new InArgument<ICollection<Employee>>(employees),
            Item =  new LambdaValue<Employee>(c => new Employee(2, "Employee 2", "DEV", "Redmond"))
        },
        new AddToCollection<Employee>
        {
            Collection = new InArgument<ICollection<Employee>>(employees),
            Item =  new LambdaValue<Employee>(c => new Employee(3, "Employee 3", "PM", "Redmond"))
        },
        new AddToCollection<Employee>
        {
            Collection = new InArgument<ICollection<Employee>>(employees),
            Item =  new LambdaValue<Employee>(c => new Employee(4, "Employee 4", "PM", "China"))
        },
        new FindInCollection<Employee>
        {
            Collections = new InArgument<IEnumerable<Employee>>(employees),
            Predicate = new LambdaValue<Func<Employee, bool>>(c => predicate),
            Result = new OutArgument<IList<Employee>>(devsFromRedmond)
        },
        new ForEach<Employee>
        {
            Values = new InArgument<IEnumerable<Employee>>(devsFromRedmond),
            Body = new ActivityAction<Employee>
            {
                Argument = iterationVariable,
                Handler = new WriteLine
                {
                    Text = new InArgument<string>(env => iterationVariable.Get(env).ToString())
                }
            }
        }
    }
};

So verwenden Sie dieses Beispiel

  1. Öffnen Sie in Visual Studio 2010 die Projektmappendatei "LinqToObjects.sln".

  2. Drücken Sie F6, um die Projektmappe zu erstellen.

  3. Drücken Sie F5, um die Projektmappe auszuführen.

Dd797580.Important(de-de,VS.100).gif Hinweis:
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.

<Installationslaufwerk>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.

<Installationslaufwerk>:\WF_WCF_Samples\WF\Scenario\ActivityLibrary\Linq\LinqToObjects

Siehe auch

Weitere Ressourcen

Lambda Expressions (C# Programming Guide)
LINQ to Objects