/// <summary>
        /// Not Exists查询
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="NotExistsT"></typeparam>
        /// <param name="filter"></param>
        /// <param name="notExistsFilter"></param>
        /// <param name="fields"></param>
        /// <returns></returns>
        public static List <T> SelectNotExists <T, NotExistsT>(Expression <Func <T, NotExistsT, bool> > notExistsFilter, Expression <Func <T, bool> > filter = null, params Expression <Func <T, object> >[] fields)
        {
            string strSql   = SelectScript(filter, null, fields);
            var    model    = Activator.CreateInstance <T>();
            Type   t        = model.GetType(); //获得该类的Type
            string tbName   = GetTableName(t); //表名
            string nickName = " as " + notExistsFilter.Parameters[0];

            strSql = strSql.Replace(tbName, tbName + nickName);
            if (strSql.IndexOf(" where ") > 0)
            {
                strSql += " and " + NotExists(notExistsFilter);
            }
            else
            {
                strSql += " where " + NotExists(notExistsFilter);
            }

            List <T> list = new List <T>();
            var      dt   = DbHelperSQL.Query(strSql.ToString()).Tables[0];

            list = ModelUtil.DataTableParse <T>(dt);

            return(list);
        }
        /// <summary>
        /// 根据主键值查询获取一条数据
        /// </summary>
        /// <typeparam name="T">表实体类</typeparam>
        /// <param name="keyValue">主键值</param>
        /// <returns></returns>
        public static T GetModel <T>(object keyValue)
        {
            List <SqlParameter> parameters = new List <SqlParameter>();
            var           model            = Activator.CreateInstance <T>();
            StringBuilder strSql           = new StringBuilder();
            string        tbName           = string.Empty;        //表名
            List <string> keyNames         = new List <string>(); //主键字段名

            CreateKeyParameter <T>(keyValue, ref parameters, ref tbName, ref keyNames);

            strSql.AppendFormat("select * from {0}", tbName);
            if (keyNames.Count > 0)
            {
                strSql.Append(" where ");
            }
            for (int i = 0; i < keyNames.Count; i++)
            {
                if (i > 0)
                {
                    strSql.Append(" and ");
                }
                strSql.AppendFormat("{0} = @{0}", keyNames[i]);
            }

            var dt = DbHelperSQL.Query(strSql.ToString(), parameters.ToArray()).Tables[0];

            model = ModelUtil.DataTableParseSingle <T>(dt);

            return(model);
        }
Example #3
0
        /// <summary>
        /// 根据条件查询
        /// </summary>
        /// <typeparam name="T">表实体类</typeparam>
        /// <param name="filter">查询条件:lambda条件过滤表达式</param>
        /// <param name="order">排序表达式</param>
        /// <param name="fields">查询字段:lambda字段表达式【可多组】</param>
        /// <returns>列表实体</returns>
        public static List <T> Select <T>(Expression <Func <T, bool> > filter = null, OrderBy <T> order = null, params Expression <Func <T, object> >[] fields)
        {
            string strWhere  = string.Empty;
            string strFields = string.Empty;
            string orderBy   = string.Empty;

            if (filter != null)
            {
                strWhere = LinqCompile.GetWhereByLambda(filter, DataBaseType.SqlServer);
            }

            if (order != null)
            {
                orderBy = OrderByUtil.GetOrderBy <T>(order.GetOrderByList());
            }

            foreach (var f in fields)
            {
                var fieldName = ExpressionField.GetFieldName <T>(f);
                strFields = strFields + "," + fieldName;
            }
            if (string.IsNullOrEmpty(strFields))
            {
                strFields = "*";
            }
            else
            {
                strFields = strFields.Trim(',');
            }


            List <T>      list   = new List <T>();
            StringBuilder strSql = new StringBuilder();
            var           model  = Activator.CreateInstance <T>();
            Type          t      = model.GetType(); //获得该类的Type
            string        tbName = GetTableName(t); //表名

            strSql.AppendFormat("select {0} ", strFields);

            strSql.AppendFormat(" from {0} ", tbName);
            if (!string.IsNullOrEmpty(strWhere))
            {
                strSql.AppendFormat(" where {0} ", strWhere);
            }
            if (!string.IsNullOrEmpty(orderBy))
            {
                strSql.Append(orderBy);
            }

            var dt = DbHelperSQL.Query(strSql.ToString(), null).Tables[0];

            list = ModelUtil.DataTableParse <T>(dt);

            return(list);
        }
        /// <summary>
        /// 多表联合查询(left join)
        /// </summary>
        /// <typeparam name="T">返回的数据实体类型</typeparam>
        /// <typeparam name="T1">表1</typeparam>
        /// <typeparam name="T2">表2</typeparam>
        /// <typeparam name="T3">表3</typeparam>
        /// <typeparam name="T4">表4</typeparam>
        /// <typeparam name="T5">表5</typeparam>
        /// <typeparam name="T6">表6</typeparam>
        /// <param name="joinExpression">联接条件</param>
        /// <param name="filter">查询条件</param>
        /// <param name="order">排序</param>
        /// <param name="fields">查询字段</param>
        /// <returns>数据实体列表</returns>
        public static List <T> Join <T, T1, T2, T3, T4, T5, T6>(Expression <Func <T1, T2, T3, T4, T5, T6, bool> > joinExpression, Expression <Func <T1, T2, T3, T4, T5, T6, bool> > filter = null, OrderBy <T> order = null,
                                                                params Expression <Func <T1, T2, T3, T4, T5, T6, object> >[] fields)
        {
            string   strSql = JoinScript(joinExpression, filter, order, fields);
            List <T> list   = new List <T>();
            var      dt     = DbHelperSQL.Query(strSql).Tables[0];

            list = ModelUtil.DataTableParse <T>(dt);

            return(list);
        }
        /// <summary>
        /// 根据条件查询
        /// </summary>
        /// <typeparam name="T">表实体类</typeparam>
        /// <param name="filter">查询条件:lambda条件过滤表达式</param>
        /// <param name="order">排序表达式</param>
        /// <param name="fields">查询字段:lambda字段表达式【可多组】</param>
        /// <returns>列表实体</returns>
        public static List <T> Select <T>(Expression <Func <T, bool> > filter = null, OrderBy <T> order = null, params Expression <Func <T, object> >[] fields)
        {
            string strSql = SelectScript(filter, order, fields);

            List <T> list = new List <T>();
            var      dt   = DbHelperSQL.Query(strSql.ToString()).Tables[0];

            list = ModelUtil.DataTableParse <T>(dt);

            return(list);
        }
        /// <summary>
        /// 根据条件查询一条记录
        /// </summary>
        /// <typeparam name="T">表实体类</typeparam>
        /// <param name="filter">查询条件:lambda条件过滤表达式</param>
        /// <param name="order">排序表达式</param>
        /// <param name="fields">查询字段:lambda字段表达式【可多组】</param>
        /// <returns>列表实体</returns>
        public static T SelectSingleRecord <T>(Expression <Func <T, bool> > filter = null, OrderBy <T> order = null, params Expression <Func <T, object> >[] fields)
        {
            string strSql = SelectScript(filter, order, fields);

            List <T> list = new List <T>();
            var      dt   = DbHelperSQL.Query(strSql.ToString()).Tables[0];

            list = ModelUtil.DataTableParse <T>(dt);

            if (list != null && list.Count > 0)
            {
                return(list[0]);
            }
            else
            {
                return(default(T));
            }
        }
        /// <summary>
        /// SqlBulkCopy批量提交数据[复制]
        /// </summary>
        /// <typeparam name="T">表实体类</typeparam>
        /// <param name="modelList">列表实体</param>
        /// <returns></returns>
        public static void SqlBulkCopy <T>(List <T> modelList)
        {
            DataTable dataTable = ModelUtil.ModelList2DataTable <T>(modelList);

            DbHelperSQL.SqlBulkCopyByDataTable(dataTable.TableName, dataTable);
        }
        /// <summary>
        /// SqlDataAdapter批量更新
        /// </summary>
        /// <typeparam name="T">表实体类</typeparam>
        /// <param name="modelList">列表实体</param>
        /// <returns>返回更新影响的行数</returns>
        public static int BatchUpdate <T>(List <T> modelList)
        {
            DataTable dataTable = ModelUtil.ModelList2DataTable <T>(modelList);

            return(DbHelperSQL.BatchUpdate(dataTable.TableName, dataTable));
        }