using System; using System.Collections.Generic; using System.Linq; namespace COA.EnterpriseServices.DataAccess.Helpers { public class BaseHelper where T : class, IRecord { protected readonly ICollection> dataAccessInstances; public BaseHelper() { dataAccessInstances = Dependencies.Container .GetAllInstances>() .OrderBy(i => i.GetType().Name.StartsWith("QuickBase", StringComparison.OrdinalIgnoreCase)) .ToList(); } protected TResult Invoke(Func, TResult> func) { var results = new List(); foreach (var dataAccessInstance in dataAccessInstances) { results.Add(func(dataAccessInstance)); } // if the "EF" version invokes first, return that value return results.FirstOrDefault(r => r != null && !r.Equals(default(TResult))); } } }