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 |
---|---|
|
Eine erforderliche Eigenschaft, die die Quellauflistung angibt. |
|
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
Öffnen Sie in Visual Studio 2010 die Projektmappendatei "LinqToObjects.sln".
Drücken Sie F6, um die Projektmappe zu erstellen.
Drücken Sie F5, um die Projektmappe auszuführen.
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
|