Example #1
0
        /// <summary>
        /// 获取指定anditems条件数组为并且的查询对象
        /// </summary>
        /// <param name="view"></param>
        /// <param name="modelType">数据模型类型</param>
        /// <param name="anditems">并且表达式</param>
        /// <param name="paramets">表达式参数数组</param>
        /// <param name="selectFieldNames">SELECT部分的字段名称数组,传null指示使用*选择</param>
        /// <returns></returns>
        public static object GetDataByAndFilterExpress(this IDataSelector view, Type modelType, IEnumerable <string> anditems, IEnumerable <IDataParamet> paramets, IEnumerable <string> selectFieldNames)
        {
            IEnumerable <IDataParamet> pvs;
            string andfilter = QuerySqlFactory.UnionWhereForAnd(view.DbTypeName, anditems, paramets, out pvs);

            return(view.ExecuteReaderOfFirstFor(QuerySqlFactory.CreateQuerySqlByFilters(view.DbTypeName, modelType, andfilter, pvs, selectFieldNames, 1)));
        }
Example #2
0
        /// <summary>
        /// 获取指定字段值相等的数据
        /// </summary>
        /// <typeparam name="T">数据模型类型</typeparam>
        /// <param name="view"></param>
        /// <param name="fieldname">字段名称数组</param>
        /// <param name="fieldvalue">字段值数组</param>
        /// <param name="selectFieldNames">SELECT部分的字段名称数组,传null指示使用*选择</param>
        /// <returns></returns>
        public static IEnumerable <T> GetDataListByFieldEqValue <T>(this IDataSelector view, IEnumerable <string> fieldname, IEnumerable <object> fieldvalue, IEnumerable <string> selectFieldNames)
            where T : class, new()
        {
            List <IDataParamet> pvs     = new List <IDataParamet>();
            List <string>       filters = new List <string>();

            if (fieldname != null && fieldvalue != null)
            {
                int c = fieldname.Count();
                for (int i = 0; i < c; i++)
                {
                    IDataParamet p;
                    string       f = QuerySqlFactory.CreateEqWhere(view.DbTypeName, fieldname.ElementAt(i), fieldvalue.ElementAt(i), out p);
                    if (!string.IsNullOrEmpty(f))
                    {
                        filters.Add(f);
                    }
                    if (p != null)
                    {
                        pvs.Add(p);
                    }
                }
            }
            return(GetDataListByAndFilterExpress <T>(view, filters, pvs, selectFieldNames));
        }
Example #3
0
        /// <summary>
        /// 获取指定anditems条件数组为并且的查询对象
        /// </summary>
        /// <typeparam name="T">数据模型类型</typeparam>
        /// <param name="view"></param>
        /// <param name="anditems">并且表达式</param>
        /// <param name="paramets">表达式参数数组</param>
        /// <param name="selectFieldNames">SELECT部分的字段名称数组,传null指示使用*选择</param>
        /// <returns></returns>
        public static T GetDataByAndFilterExpress <T>(this IDataSelector view, IEnumerable <string> anditems, IEnumerable <IDataParamet> paramets, IEnumerable <string> selectFieldNames)
            where T : class, new()
        {
            IEnumerable <IDataParamet> pvs;
            string andfilter = QuerySqlFactory.UnionWhereForAnd(view.DbTypeName, anditems, paramets, out pvs);

            return(view.ExecuteReaderOfFirst <T>(QuerySqlFactory.CreateQuerySqlByFilters(view.DbTypeName, typeof(T), andfilter, pvs, selectFieldNames, 1)));
        }
        public ISqlExpress Update(string dbtypeName)
        {
            var dt = ModelType.GetDataModel().DbType;

            switch (dt)
            {
            case DataModel.DbTypeForDataModel.Table:
                return(QuerySqlFactory.CreateTableDefineSql(dbtypeName, ModelType));

            default:
                throw new UnkownCodeException(ErrorCodes.UnkownError, string.Format(LocalResource.NotSupportCreateDatabaseObject, dt.GetEnumDisplayName()));
            }
        }
Example #5
0
        /// <summary>
        /// 检测唯一规则
        /// </summary>
        /// <param name="view"></param>
        /// <param name="dm"></param>
        /// <param name="onlyattr"></param>
        /// <param name="uponlyfields"></param>
        /// <param name="modalcontext"></param>
        /// <param name="errs"></param>
        private void CheckOnlyValues(
            IDataModel dm,
            OnlyValueKeysAttribute onlyattr,
            IEnumerable <string> uponlyfields,
            IDataUpdateContext modalcontext,
            IList <DataModalFieldException> errs)
        {
            if (((modalcontext.ModalState & ModalState.AddNew) == ModalState.AddNew ||
                 (modalcontext.ModalState & ModalState.Update) == ModalState.Update) &&
                onlyattr != null && onlyattr.OnlyKeys != null && onlyattr.OnlyKeys.Count() > 0 &&
                uponlyfields != null && uponlyfields.Count() > 0)
            {
                IDataSelector view = CurrentSelector;
                object        data = modalcontext.Data;
                //要查询的参数名称
                List <string> parametnames = new List <string>(onlyattr.OnlyKeys);
                //构建查选参数
                object paramet = modalcontext.ModalType.CreateObject();
                switch (modalcontext.ModalState)
                {
                case ModalState.AddNew:
                {
                    //设置所有唯一值
                    foreach (var str in parametnames)
                    {
                        var f = dm.Fields[str];
                        f.SetModelFieldValue(paramet, f.GetModelFieldValue(data));
                    }
                    break;
                }

                case ModalState.Update:
                {
                    paramet.SetPropertyValue("Id", data.GetPropertyValue("Id"));
                    object orgvalue = null;
                    foreach (var str in parametnames)
                    {
                        if (uponlyfields.FirstOrDefault(f => string.Equals(f, str, StringComparison.OrdinalIgnoreCase)) != null)
                        {
                            //值已修改
                            var f = dm.Fields[str];
                            f.SetModelFieldValue(paramet, f.GetModelFieldValue(data));
                        }
                        else
                        {
                            //值未修改
                            //获取原值
                            if (orgvalue == null)
                            {
                                orgvalue = view.GetDataById(modalcontext.ModalType, null, (long)data.GetMemberValue("Id"));
                            }
                            var f = dm.Fields[str];
                            f.SetModelFieldValue(paramet, f.GetModelFieldValue(orgvalue));
                        }
                    }
                    break;
                }
                }
                //全为null值时的策略
                if (!onlyattr.IsIncludeAllNull && IsAllNullValue(paramet, onlyattr.OnlyKeys, dm))
                {
                    return;
                }
                string softdelfieldname = dm.GetSoftDeleteFieldName();
                if (!string.IsNullOrEmpty(softdelfieldname))
                {
                    //该模型是软删除模型
                    //设置为未删除
                    if (!parametnames.Contains(softdelfieldname))
                    {
                        parametnames.Add(softdelfieldname);
                    }
                    dm.Fields[softdelfieldname].SetModelFieldValue(paramet, false);
                }

                List <string>       filters  = new List <string>();
                List <IDataParamet> filterpn = new List <IDataParamet>();
                foreach (var pn in parametnames)
                {
                    IDataParamet pv;
                    string       f = QuerySqlFactory.CreateEqWhere(view.DbTypeName, pn, dm.Fields[pn].GetModelFieldValue(paramet), out pv);
                    if (!string.IsNullOrEmpty(f))
                    {
                        filters.Add(f);
                    }
                    if (pv != null)
                    {
                        filterpn.Add(pv);
                    }
                }

                switch (modalcontext.ModalState)
                {
                case ModalState.Update:
                {
                    //排除本身的条件
                    long         id = (long)data.GetPropertyValue("Id");
                    IDataParamet pv;
                    string       f = QuerySqlFactory.CreateNotEqWhere(view.DbTypeName, "Id", id, out pv);
                    if (!string.IsNullOrEmpty(f))
                    {
                        filters.Add(f);
                    }
                    if (pv != null)
                    {
                        filterpn.Add(pv);
                    }
                    break;
                }
                }
                if (view.GetDataByAndFilterExpress(modalcontext.ModalType, filters, filterpn, new string[] { "Id" }) != null)
                {
                    AddOnlyValueErrors(onlyattr.OnlyKeys, dm, errs);
                }
            }
        }
Example #6
0
 /// <summary>
 /// 获取指定Id的数据
 /// </summary>
 /// <typeparam name="T">数据模型类型</typeparam>
 /// <param name="view"></param>
 /// <param name="selectFieldNames">SELECT部分的字段名称数组,传null指示使用*选择</param>
 /// <param name="id">要获取数据的Id</param>
 /// <returns></returns>
 public static T GetDataById <T>(this IDataSelector view, IEnumerable <string> selectFieldNames, long id)
     where T : class, new()
 {
     return(view.ExecuteReaderOfFirst <T>(QuerySqlFactory.CreateQuerySqlByIdValue(view.DbTypeName, typeof(T), selectFieldNames, id)));
 }
Example #7
0
 /// <summary>
 /// 获取指定Id的数据
 /// </summary>
 /// <param name="view"></param>
 /// <param name="modelType">数据模型类型</param>
 /// <param name="selectFieldNames">SELECT部分的字段名称数组,传null指示使用*选择</param>
 /// <param name="id">要获取数据的Id</param>
 /// <returns></returns>
 public static object GetDataById(this IDataSelector view, Type modelType, IEnumerable <string> selectFieldNames, long id)
 {
     return(view.ExecuteReaderOfFirstFor(QuerySqlFactory.CreateQuerySqlByIdValue(view.DbTypeName, modelType, selectFieldNames, id)));
 }