Attività LINQ to ObjectsLINQ to Objects Activity

In questo esempio viene illustrato come creare un'attività per usare LINQ to Objects per eseguire query su elementi di una raccolta.This sample demonstrates how to create an activity to use LINQ to Objects to query elements in a collection.

Dettagli dell'attività per FindInCollectionActivity Details for FindInCollection

Questa attività consente agli utenti di eseguire query su elementi di raccolte in memoria usando LINQ to Objects.This activity allows users to query elements from collections in memory using LINQ to Objects. È necessario fornire un predicato LINQ nel formato di un'espressione lambda per filtrare i risultati.You must provide a LINQ predicate in the form of a lambda expression to filter the results. Questa attività può essere usata unitamente ad attività AddToCollection<T>.This activity can be used in conjunction with AddToCollection<T> activities.

Nella tabella seguente viene descritta la proprietà e i valori restituiti per l'attività.The following table details the property and return values for the activity.

Proprietà o valore restituitoProperty or Return Value DescrizioneDescription
Proprietà CollectionCollection property Proprietà obbligatoria che specifica la raccolta di origine.A required property that specifies the source collection.
Proprietà PredicatePredicate property Proprietà obbligatoria che specifica il filtro per la raccolta nel formato di un'espressione lambda.A required property that specifies the filter for the collection in the form of a lambda expression.
Valore restituitoReturn Value La raccolta filtrata.The filtered collection.

Esempio di codice che usa l'attività personalizzataCode Sample that uses the Custom Activity

Nell'esempio di codice seguente viene usata l'attività personalizzata FindInCollection per trovare tutte le righe in una raccolta di dipendenti la cui proprietà Role è impostata su Manager e la proprietà Location è impostata su Redmond.The following code example uses the FindInCollection custom activity to find all rows in a collection of employees that have a Role property set to Manager and the Location property set to 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")))  
};  

Nel codice seguente viene illustrato come creare un programma flusso di lavoro che usa l'attività FindInCollection personalizzata e le attività AddToCollection<T> e ForEach<T> per popolare una raccolta con dipendenti, trovare tutti i dipendenti con il ruolo di sviluppatore e che si trovano a Redmond, quindi scorrere l'elenco risultante.The following code shows how to create a workflow program that uses the custom FindInCollection activity, AddToCollection<T>, and ForEach<T> activities to populate a collection with employees, find all the employees that have developer roles and are located in Redmond, and then iterate through the resulting list.

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

Per usare questo esempioTo use this sample

  1. Tramite Visual Studio 2010Visual Studio 2010 aprire il file della soluzione LinqToObjects.sln.Using Visual Studio 2010Visual Studio 2010, open the LinqToObjects.sln solution file.

  2. Per compilare la soluzione, premere CTRL+MAIUSC+B.To build the solution, press CTRL+SHIFT+B.

  3. Per eseguire la soluzione, premere F5.To run the solution, press F5.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

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

Vedere ancheSee Also

Espressioni lambda (Guida per programmatori c#)Lambda Expressions (C# Programming Guide)
LINQ to ObjectsLINQ to Objects