public static List <T> GetList <T>(Expression <Func <T, bool> > predicate) where T : ICacheable { // try to load from cache var objList = CacheStore <T> .GetObjects(predicate); if (objList == null) { // cache does not contains objects, load from db objList = DbStore <T> .GetDbObjects(predicate); // store in cache CacheStore <T> .StoreObjects(objList, predicate); } return(objList); }