/// <summary>
		/// Returns the list of properties for the given instance.
		/// </summary>
		/// <remarks>
		/// The query engine does not cache the result.
		/// </remarks>
		/// <param name="dictionary">The instance to get the properties for.</param>
		/// <returns>A list of <see cref="PropertyBinding"/> for the given instance.</returns>
		public static KeyPropertyBinding[] GetProperties(IDictionary dictionary)
		{
			if (dictionary == null)
				throw ExceptionBuilder.ArgumentNull("dictionary");

			List<KeyPropertyBinding> propertyList = new List<KeyPropertyBinding>();

			foreach (object key in dictionary.Keys)
			{
				string name = key.ToString();
				object value = dictionary[key];
				Type type = (value == null) ? typeof(object) : value.GetType();

				KeyPropertyBinding propertyBinding = new KeyPropertyBinding(name, key, type);
				propertyList.Add(propertyBinding);
			}

			return propertyList.ToArray();
		}
        /// <summary>
        /// Returns the list of properties for the given instance.
        /// </summary>
        /// <remarks>
        /// The query engine does not cache the result.
        /// </remarks>
        /// <param name="dictionary">The instance to get the properties for.</param>
        /// <returns>A list of <see cref="PropertyBinding"/> for the given instance.</returns>
        public static KeyPropertyBinding[] GetProperties(IDictionary dictionary)
        {
            if (dictionary == null)
            {
                throw ExceptionBuilder.ArgumentNull("dictionary");
            }

            List <KeyPropertyBinding> propertyList = new List <KeyPropertyBinding>();

            foreach (object key in dictionary.Keys)
            {
                string name  = key.ToString();
                object value = dictionary[key];
                Type   type  = (value == null) ? typeof(object) : value.GetType();

                KeyPropertyBinding propertyBinding = new KeyPropertyBinding(name, key, type);
                propertyList.Add(propertyBinding);
            }

            return(propertyList.ToArray());
        }