/// <summary>
        /// Find Entity
        /// </summary>
        /// <param name="entityFinder"></param>
        /// <returns></returns>
        public EntityListReadOnly <T> FindEntities(EntityFinder entityFinder)
        {
            EntityListReadOnly <T> returnValue = new EntityListReadOnly <T>();

            this.FindAll(returnValue, entityFinder, PredicateForEntityFinder);
            return(returnValue);
        }
        /// <summary>
        /// Find Entity
        /// </summary>
        /// <param name="entityFinder"></param>
        /// <returns></returns>
        public T FindEntity(EntityFinder entityFinder)
        {
            T returnValue = null;
            EntityListReadOnly <T> entityListReadOnly = this.FindEntities(entityFinder);

            if (entityListReadOnly.Count > 0)
            {
                returnValue = entityListReadOnly[0];
            }
            return(returnValue);
        }
        private bool PredicateForEntityFinder(T obj, object criteria)
        {
            bool         returnValue  = true;
            EntityFinder entityFinder = criteria as EntityFinder;

            if (entityFinder == null)
            {
                throw new ArgumentNullException();
            }

            System.Type type = typeof(T);

            for (int i = 0; i < entityFinder.Count; i++)
            {
                System.Reflection.PropertyInfo property = type.GetProperty(entityFinder.GetKey(i), BINDINGS_ALL_INCLUDING_BASE);
                if ((property == null) || (!entityFinder.GetValue(i).Equals(property.GetValue(obj, null))))
                {
                    returnValue = false;
                    break;
                }
            }
            return(returnValue);
        }