1: private static LambdaExpression[] TraverseAndBuildTree(object root,
2: IGraphBuilder graphBuilder)
3: {
4: if (graphBuilder.GetLabel(root).ToString().ToLower() == "send")
5: {
6: IEnumerable<object> childs = graphBuilder.GetSuccessors(root);
7:
8: string path =
9: graphBuilder.GetSuccessors(childs.First()).First().ToString(
10: List<string> emails = new List<string>();
11: foreach (object objContact in
12: graphBuilder.GetSequenceElements(childs.Last()))
13: {
14: emails.Add(objContact.ToString());
15: }
16:
17: MethodCallExpression expression =
18: Expression.Call(typeof(Program).GetMethod("Send"),
19: new Expression[] { Expression.Constant(path, typeof(string)),
20: Expression.Constant(emails.ToArray(), typeof(string[])) })
21: LambdaExpression lambda = Expression.Lambda(expression);
22: return new LambdaExpression[] { lambda };
23: }
24:
25: List<LambdaExpression> expressions = new List<LambdaExpression>();
26: if (graphBuilder.IsSequence(root))
27: foreach (object childNode in
28: graphBuilder.GetSequenceElements(root))
29: {
30: expressions.AddRange(
31: TraverseAndBuildTree(childNode, graphBuilder));
32: }
33: else if (graphBuilder.IsNode(root))
34: foreach (object childNode in
35: graphBuilder.GetSuccessors(root))
36: {
37: expressions.AddRange(
38: TraverseAndBuildTree(childNode, graphBuilder));
39: }
40: return expressions.ToArray();
41: }