Действие LINQ to Objects
Данный раздел относится к версии Windows Workflow Foundation 4.
В этом образце демонстрируется создание действия, использующего LINQ to Objects для запроса к элементам в коллекции.
Сведения о действии FindInCollection
Это действие позволяет пользователям создавать запросы к элементам в коллекциях в памяти с помощью LINQ to Objects. Необходимо указать предикат LINQ в форме лямбда-выражения для фильтрации результатов. Это действие может быть использовано вместе с действиями AddToCollection.
В следующих сведениях о таблице подробно описаны свойства и возвращаемые значения для действия.
Свойство или возвращаемое значение | Описание |
---|---|
|
Обязательное свойство, в котором указывается исходная коллекция. |
|
Обязательное свойство, в котором указывается фильтр для коллекции в виде лямбда-выражения. |
Возвращаемое значение |
Фильтруемая коллекция. |
Образец кода, использующий настраиваемое действие
В следующем примере кода настраиваемое действие FindInCollection
используется для нахождения всех строк в коллекции служащих, у которых свойство Role
равно Manager
, а свойство Location
равно 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")))
};
В следующем коде показано, как создать программу рабочего процесса, применяющую пользовательское действие FindInCollection и действия AddToCollection и ForEach для заполнения коллекции служащими, нахождения всех служащих, играющих роль разработчика и работающих в Редмонде и для итерации по получаемому списку результатов.
// 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())
}
}
}
}
};
Использование этого образца
Откройте файл решения LinqToObjects.sln в среде Visual Studio 2010.
Чтобы построить решение, нажмите клавишу F6.
Чтобы запустить решение, нажмите клавишу F5.
Примечание |
---|
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).
<диск_установки>:\WF_WCF_Samples
Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.
<диск_установки>:\WF_WCF_Samples\WF\Scenario\ActivityLibrary\Linq\LinqToObjects
|
См. также
Другие ресурсы
Лямбда-выражения (Руководство по программированию на C#)
LINQ to Objects