示例#1
0
文件: SqlStore.cs 项目: JabX/kinetix
        /// <summary>
        /// Récupération d'une liste d'objets d'un certain type correspondant à un critère donnée.
        /// </summary>
        /// <param name="collection">Collection à charger.</param>
        /// <param name="commandName">Nom de la commande.</param>
        /// <param name="queryParameter">Paramètres de tri et de limite (vide par défaut).</param>
        /// <param name="criteria">Map de critères auquelle la recherche doit correpondre.</param>
        /// <returns>Collection.</returns>
        private ICollection <T> InternalLoadAll(ICollection <T> collection, string commandName, QueryParameter queryParameter, FilterCriteria criteria)
        {
            int maxRows = BrokerManager.NoLimit;

            if (queryParameter != null)
            {
                // Définition du tri à partir de la requete.
                queryParameter.RemapSortColumn(typeof(T));

                // Definition du maxRows
                maxRows = GetMaxRowCount(queryParameter.MaxRows);
            }

            IReadCommand    cmd  = this.GetCommand(commandName, _definition.ContractName, criteria, maxRows, queryParameter);
            ICollection <T> coll = CollectionBuilder <T> .ParseCommand(collection, cmd);

            long collCount = coll.Count;

            if (queryParameter != null && (queryParameter.Offset > 0 || queryParameter.Limit > 0))
            {
                collCount = QueryContext.InlineCount.Value;
            }

            if (maxRows > BrokerManager.NoLimit && collCount > maxRows)
            {
                throw new BrokerException("Store return too many rows.");
            }

            return(coll);
        }