protected Array GetAttributes(object dbProvider) { // TODO: Include IPerCallData providers here var dbProv = dbProvider as Data.DataProviders.DataProvider; var paidProv = DataProviderManager.CreatePaidDataProvider(dbProv); var prov = DataProviderManager.CreateDataProvider(dbProv); var properties = dbProv.GetProperties(); var configKeys = prov.ToAllPropertyInfo(); return((from pInfo in configKeys join pp in properties on pInfo.Name equals pp.Name into joined from pVal in joined.DefaultIfEmpty() select new { Name = pInfo.Name, Value = (pVal == null || pInfo.Confidential) ? null : pVal.Value, Confidential = pInfo.Confidential, Required = pInfo.Required, Type = pInfo.Type }).ToArray()); }