本主题适用于 Windows Workflow Foundation 4。
此示例演示如何创建活动以使用 LINQ to Objects 查询集合中的元素。
FindInCollection 的活动详细信息
此活动允许用户使用 LINQ to Objects 查询内存中集合的元素。您必须提供 lambda 表达式形式的 LINQ 谓词以筛选结果。可将此活动与 AddToCollection 活动一起使用。
下表详述了活动的属性和返回值。
属性或返回值 | 说明 |
---|---|
|
一个指定源集合的必需属性。 |
|
一个必需属性,它指定 lambda 表达式形式的集合的筛选器。 |
返回值 |
筛选的集合。 |
使用自定义活动的代码示例
下面的代码示例使用 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 活动,在集合中填入员工,查找 Redmond 市角色为开发人员的所有员工,然后循环访问结果列表。
// 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())
}
}
}
}
};
使用此示例
使用 Visual Studio 2010 打开 LinqToObjects.sln 解决方案文件。
若要生成解决方案,请按 F6。
若要运行解决方案,请按 F5。
![]() |
---|
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:
<安装驱动器>:\WF_WCF_Samples
如果此目录不存在,请访问针对 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录:
<安装驱动器>:\WF_WCF_Samples\WF\Scenario\ActivityLibrary\Linq\LinqToObjects
|