/// <summary>
        /// Creates the filter expression node.
        /// </summary>
        /// <param name="pattern">The pattern.</param>
        /// <param name="displayName">The display name.</param>
        /// <param name="metaClass">The meta class.</param>
        /// <returns></returns>
        protected virtual IEnumerable <ElementDefs> GetElementDefsByMetaClass(string pattern, MetaClass metaClass)
        {
            if (metaClass == null)
            {
                throw new ArgumentNullException("metaClass");
            }

            foreach (MetaField field in metaClass.MetaFields)
            {
                if (customFieldFiter.All(x => x(field)))
                {
                    IEnumerable <ElementDefs> conditonDef;
                    if (MetaDataType2ElDefMap.TryGetValue(field.DataType, out conditonDef))
                    {
                        string      codeExpr   = string.IsNullOrEmpty(pattern) ? field.Name : string.Format(pattern, field.Name);
                        string      dynamicKey = ElementDefs.GetDynamicKey(metaClass.Name + "." + field.Name + "." + codeExpr);
                        ElementDefs retVal     = new ElementDefs()
                        {
                            Key   = dynamicKey, Name = codeExpr,
                            Descr = field.FriendlyName, Conditions = conditonDef
                        };
                        yield return(retVal);
                    }
                }
            }
        }