/// <summary>
        /// Returns syncronized read-only collection of all found domain objects.
        /// </summary>
        /// <typeparam name="TEntity">Type of entities.</typeparam>
        /// <returns>Syncronized read-only collection of all found domain objects.</returns>
        protected IDataObjectCollection <T> _SearchAll <TEntity>(bool asSynchronized)
            where TEntity : EntityObject
        {
            DataObjectCollection <T, TEntity> resultCol = new DataObjectCollection <T, TEntity>(_dataService, true);

            resultCol.Initialize(false, asSynchronized);

            return(resultCol);
        }
        /// <summary>
        /// Searches the table and returns read-only collection of found domain objects.
        /// </summary>
        /// <typeparam name="TEntity">Type of entities.</typeparam>
        /// <param name="initialQuery">Intial query to the database.</param>
        /// <param name="queryParams">Parameters for the query.</param>
        /// <param name="filterClause">Filter clause used for syncronized data object collections.</param>
        /// <returns>Collection of found domain objects. It is syncronized in <c>filterClause</c> isn't null.</returns>
        protected IDataObjectCollection <T> _Search <TEntity>(string initialQuery,
                                                              ObjectParameter[] queryParams,
                                                              Expression <Func <TEntity, bool> > filterClause)
            where TEntity : EntityObject
        {
            DataObjectCollection <T, TEntity> resultCol = new DataObjectCollection <T, TEntity>(_dataService, true);

            resultCol.Initialize(initialQuery, queryParams, filterClause);

            return(resultCol);
        }
        /// <summary>
        /// Searches the table and returns read-only collection of found domain objects.
        /// </summary>
        /// <typeparam name="TEntity">Type of entities.</typeparam>
        /// <param name="whereClause">Where clause used to search objects.</param>
        /// <param name="filterClause">Filter clause used for syncronized data object collections.</param>
        /// <returns>Collection of found domain objects. It is syncronized in <c>filterClause</c> isn't null.</returns>
        protected IDataObjectCollection <T> _Search <TEntity>(
            Expression <Func <TEntity, bool> > whereClause,
            Expression <Func <TEntity, bool> > filterClause)
            where TEntity : EntityObject
        {
            DataObjectCollection <T, TEntity> resultCol = new DataObjectCollection <T, TEntity>(_dataService, true);

            resultCol.Initialize(whereClause, filterClause);

            return(resultCol);
        }
        /// <summary>
        /// Retrieves data from the specified source.
        /// </summary>
        /// <typeparam name="TEntity">The type of entities to be returned.</typeparam>
        /// <param name="source">The source of data to be retrieved.</param>
        /// <param name="filterClause">Filters new data objects for synchronized data object
        /// collections.</param>
        /// <returns>A read-only collection of domain objects for the specified data
        /// source.</returns>
        protected IDataObjectCollection <T> Query <TEntity>(
            IQueryable <TEntity> source,
            Expression <Func <TEntity, bool> > filterClause)
            where TEntity : EntityObject
        {
            var objects = _dataService.FindObjects <TEntity>(source);
            var result  = new DataObjectCollection <T, TEntity>(_dataService, true);

            result.Initialize(objects, filterClause);

            return(result);
        }