Partager via


Activité LINQ to Objects

Cette rubrique s'applique à Windows Workflow Foundation 4.

Cet exemple montre comment créer une activité pour utiliser LINQ to Objects pour interroger des éléments d'une collection.

Détails de l'activité pour FindInCollection

Cette activité permet aux utilisateurs d'interroger des éléments de collections en mémoire à l'aide de LINQ to Objects. Vous devez fournir un prédicat LINQ sous la forme d'une expression lambda pour filtrer les résultats. Cette activité peut être utilisée conjointement avec des activités AddToCollection.

Le tableau suivant décrit en détail les propriétés et valeurs de retour pour l'activité.

Propriété ou valeur de retour Description

Propriété Collection

Propriété requise qui spécifie la collection source.

Propriété Predicate

Propriété requise qui spécifie le filtre pour la collection sous la forme d'une expression lambda.

Valeur de retour

Collection filtrée.

Exemple de code qui utilise l'activité personnalisée

L'exemple de code suivant utilise l'activité personnalisée FindInCollection pour rechercher toutes les lignes d'une collection d'employés qui ont une propriété Role ayant la valeur Manager et la propriété Location ayant la valeur Redmond.

// 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")))
};

Le code suivant montre comment créer un programme de workflow qui utilise l'activité FindInCollection personnalisée, AddToCollection et les activités ForEach pour remplir une collection avec des employés, rechercher tous les employés qui ont des rôles de développeur et qui se trouvent à Redmond, puis itérer au sein de la liste résultante.

// 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())
                }
            }
        }
    }
};

Pour utiliser cet exemple

  1. À l'aide de Visual Studio 2010, ouvrez le fichier solution LinqToObjects.sln.

  2. Pour générer la solution, appuyez sur F6.

  3. Pour exécuter la solution, appuyez sur F5.

Dd797580.Important(fr-fr,VS.100).gif Remarque :
Les exemples peuvent déjà être installés sur votre ordinateur. Recherchez le répertoire (par défaut) suivant avant de continuer.

<LecteurInstall>:\WF_WCF_Samples

Si ce répertoire n'existe pas, rendez-vous sur la page (éventuellement en anglais) des exemples Windows Communication Foundation (WCF) et Windows Workflow Foundation (WF) pour .NET Framework 4 pour télécharger tous les exemples Windows Communication Foundation (WCF) et WF. Cet exemple se trouve dans le répertoire suivant.

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

Voir aussi

Autres ressources

Expressions lambda (Guide de programmation C#)
LINQ to Objects