public IQueryable <T> GetEntities <T>(IQueryStrategy queryStrategy, object additionalQueryData = null) where T : class
        {
            Check.NotNull(queryStrategy, "queryStrategy");

            queryStrategy.QueryableRepository = this;

            QueryEventHandler.RepositoryQueriedEventHandler.Handle(new SimpleRepositoryQueryEvent(
                                                                       this,
                                                                       queryStrategy,
                                                                       additionalQueryData));

            var result = queryStrategy.GetQueryableEntities <T>(additionalQueryData);

            return(result);
        }
        public virtual T GetEntity <T>(IQueryStrategy queryStrategy, bool throwExceptionIfZeroOrManyFound, object additionalQueryData = null) where T : class
        {
            Check.NotNull(queryStrategy, "queryStrategy");

            queryStrategy.QueryableRepository = this;

            var allResults = queryStrategy.GetQueryableEntities <T>(additionalQueryData).Take(2).AsEnumerable();

            QueryEventHandler.RepositoryQueriedEventHandler.Handle(new SimpleRepositoryQueryEvent(
                                                                       this,
                                                                       queryStrategy,
                                                                       additionalQueryData,
                                                                       throwExceptionIfZeroOrManyFound));

            if (allResults.Count() != 1 && throwExceptionIfZeroOrManyFound)
            {
                var rowsFound = allResults.Count();
                throw new EntitySearchRepositoryException(rowsFound, typeof(T).Name, queryStrategy);
            }

            var result = allResults.FirstOrDefault();

            return(result);
        }