基于 efcore 封装的支持sql 查询

   public List<Dictionary<String, Object>> QueryData(string Sql, Dictionary<string, dynamic> parmas = null)
        {
            lock (exeLock)
            {
                List<Dictionary<String, object>> list = new List<Dictionary<string, object>>();
                Dictionary<String, object> dic = null;
                using (var cmd = _context.Database.GetDbConnection().CreateCommand())
                {
                    cmd.CommandText = Sql;
                    if (cmd.Connection.State != ConnectionState.Open)
                    {
                        cmd.Connection.Open();
                    }
                    DbParameter[] parameters = null;

                    if (parmas != null && parmas.Count > 0)
                    {
                        parameters = new DbParameter[parmas.Count];
                        int index = -1;
                        foreach (var item in parmas)
                        {
                            index = index + 1;
                            parameters[index] = new SqlParameter(item.Key, (object)item.Value);
                        }
                        cmd.Parameters.Add(parameters);
                    }
                    using (var dataReader = cmd.ExecuteReader())
                    {
                        string colName = "";
                        while (dataReader.Read())
                        {
                            dic = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
                            for (int i = 0; i < dataReader.FieldCount; i++)
                            {
                                colName = dataReader.GetName(i);
                                if (!dic.ContainsKey(colName))
                                {
                                    dic.Add(colName, dataReader[colName]);
                                }
                            }
                            if (dic.Keys.Count > 0)
                            {
                                list.Add(dic);
                            }
                        }
                        cmd.Parameters.Clear();
                        dataReader.Close();
                    }
                }
                return list;
            }

        }

 

 

  public List<Dictionary<string, Object>> QueryPage(string sql, string orderBy, int pageIndex, int pageSize, out int count, Dictionary<string, dynamic> param = null)
        {
            count = 0;
            List<Dictionary<String, Object>> list = new List<Dictionary<string, object>>();
            string strSQL = "select * from (select t.*,row_number() over(order by " + orderBy + ") rownum from (" + sql + ") t ) t0 where rownum>" + ((pageIndex - 1) * pageSize).ToString() + " and rownum<=" + (pageIndex * pageSize).ToString() + "";
            string strCount = "SELECT count(*) as count FROM (" + sql + ") tcount";
            list = QueryData(strSQL, param);
            var data = QueryData(strCount);
            if (data != null && data.Count > 0)
            {
                count = Convert.ToInt32(data.FirstOrDefault()["count"]);
            }

            return list;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值