Esempio n. 1
0
        public virtual string MethodNameToWhere(string methodName)
        {
            //QueryByUserNameAndIdOrNickNameAndChineseName
            if (string.IsNullOrEmpty(methodName))
            {
                throw new ArgumentNullException(nameof(methodName));
            }
            var methodNameCopy = methodName;

            MethodPrefixsKey methodPreix = null;

            foreach (var prefix in MethodPrefixs)
            {
                methodPreix = prefix;
                if (methodNameCopy.StartsWith(prefix.Name))
                {
                    methodNameCopy = methodNameCopy.Replace(prefix.Name, "");
                    break;
                }
            }

            var queryparms = new Queue <string>();

            SplitParams(queryparms, OpKeys.ToArray(), methodNameCopy);
            var where = BuildWhere(queryparms);

            return(where);
        }
Esempio n. 2
0
        public virtual string MethodNameToSql <T>(string methodName) where T : class
        {
            if (string.IsNullOrEmpty(methodName))
            {
                throw new ArgumentNullException(nameof(methodName));
            }

            string sql      = "";
            var    cacheKey = $"MethodNameToSql_{typeof(T)}_{methodName}";
            var    hit      = SqlCacheDict.TryGetValue(cacheKey, out sql);

            if (hit)
            {
                return(sql);
            }

            MethodPrefixsKey methodPreix = null;

            foreach (var prefix in MethodPrefixs)
            {
                methodPreix = prefix;
                if (methodName.StartsWith(prefix.Name))
                {
                    break;
                }
            }

            if (methodPreix == null)
            {
                throw new Exception(string.Format("Can not hit sql method from method name :{0}", methodName));
            }

            var select = GenericCallHelper.RunGenericMethod(this.GetType(), methodPreix.GeneratorMethod,
                                                            new Type[] { typeof(T) }, this, null);

            var where = "";
            if (methodPreix.NeedWhere)
            {
                where = " where " + MethodNameToWhere(methodName);
            }
            sql = select + where;

            SqlCacheDict.TryAdd(cacheKey, sql);

            return(sql);
        }