From 882ea8cf571c6cb04152e1045eeff21852c24df4 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 13 Mar 2025 11:54:28 +0100 Subject: [PATCH] Refactor variable merging logic in ActivityExecutionContext Replaced LINQ-based logic with a dictionary approach to merge variables. This ensures that variables are consistently merged by either name or ID when name is absent. It improves code clarity and handles edge cases more robustly. --- .../Contexts/ActivityExecutionContext.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/modules/Elsa.Workflows.Core/Contexts/ActivityExecutionContext.cs b/src/modules/Elsa.Workflows.Core/Contexts/ActivityExecutionContext.cs index 6ecc474d1..ceae56077 100644 --- a/src/modules/Elsa.Workflows.Core/Contexts/ActivityExecutionContext.cs +++ b/src/modules/Elsa.Workflows.Core/Contexts/ActivityExecutionContext.cs @@ -124,7 +124,20 @@ public partial class ActivityExecutionContext : IExecutionContext, IDisposable { var containerVariables = (Activity as IVariableContainer)?.Variables ?? Enumerable.Empty(); var dynamicVariables = DynamicVariables; - return containerVariables.Concat(dynamicVariables).DistinctBy(x => x.Name); + var mergedVariables = new Dictionary(); + + foreach (var containerVariable in containerVariables) + { + var name = !string.IsNullOrEmpty(containerVariable.Name) ? containerVariable.Name : containerVariable.Id; + mergedVariables[name] = containerVariable; + } + + foreach (var dynamicVariable in dynamicVariables) + { + var name = !string.IsNullOrEmpty(dynamicVariable.Name) ? dynamicVariable.Name : dynamicVariable.Id; + mergedVariables[name] = dynamicVariable; + } + return mergedVariables.Values; } }