EF执行数据库语句+动态where和orderby字段

[HttpPost]
        [Route("BuildLog/Query")]
        public O34000 QueryBuildLogList(I34000 ajson)//增加检索和高级检索
        {
            O34000 fResult = new O34000();
            if (string.IsNullOrEmpty(ajson.AscOrDesc))
            {
                fResult.Msg = "AscOrDesc未传值";
                return fResult;
            }
            if (string.IsNullOrEmpty(ajson.Sorter))
            {
                fResult.Msg = "Sorter未传值";
                return fResult;
            }
            //高级检索
            string where = SysDal.GetWhereStr(ajson.PowerSearch, ajson.Connector);
            string sql = "select * from PRJ_BuildLog where 1=1 " + where;
            var List = db.Database.SqlQuery<PRJ_BuildLog>(sql).AsQueryable();
            //普通检索
            if (!string.IsNullOrEmpty(ajson.EvalName))
            {
                List = List.Where(p => p.BuildLogName == ajson.EvalName).AsQueryable();
            }
            int startRow = (ajson.PageIndex - 1) * ajson.PageSize;
            int rowCount = List.Count();
            if (rowCount != 0)
            {
                fResult.Totals = List.Count();
                fResult.PageCount = rowCount;
                fResult.PageIndex = ajson.PageIndex;
                fResult.PageSize = ajson.PageSize;
                if (ajson.AscOrDesc == "Desc")
                {
                    var result = List.OrderByDescending(ajson.Sorter).Skip(startRow).Take(ajson.PageSize).ToList();
                    fResult.HeadRows = result;
                }
                else
                {
                    var result = List.OrderBy(ajson.Sorter).Skip(startRow).Take(ajson.PageSize).ToList();
                    fResult.HeadRows = result;
                }
                fResult.Success = 1;
            }
            return fResult;
        }
/// <summary>
        /// C#反射遍历对象属性
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="t">对象</param>
        public static string GetWhereStr<T>(T t,string connector)
        {
            string tStr = string.Empty;
            if (t == null)
            {
                return tStr;
            }
            System.Reflection.PropertyInfo[] properties = t.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
            if (properties.Length <= 0)
            {
                return tStr;
            }
            foreach (System.Reflection.PropertyInfo item in properties)
            {
                string name = item.Name;
                object value = item.GetValue(t, null);
                try
                {
                    if (value != null)
                    {
                        SearchItem si = (SearchItem)value;
                        if (!string.IsNullOrEmpty(si.Value1) && !string.IsNullOrEmpty(si.Type))
                        {
                            if (!string.IsNullOrEmpty(si.Value1) && !string.IsNullOrEmpty(si.Value2))
                            {
                                tStr = tStr + " " + connector + " " + name + "  between '" + si.Value1 + "' And '" + si.Value2 + "'";
                            }
                            else
                            {
                                switch (si.Type)
                                {
                                    case "左匹配":
                                        tStr = tStr + " "+ connector + " " + name + " like '%" + si.Value1 + "%'";
                                        break;
                                    case "=":
                                        tStr = tStr + " " + connector + " " + name + "='" + si.Value1 + "'";
                                        break;
                                    case ">":
                                        tStr = tStr + " " + connector + " " + name + ">'" + si.Value1 + "'";
                                        break;
                                    case "<":
                                        tStr = tStr + " " + connector + " " + name + "<'" + si.Value1 + "'";
                                        break;
                                    case ">=":
                                        tStr = tStr + " " + connector + " " + name + ">='" + si.Value1 + "'";
                                        break;
                                    case "<=":
                                        tStr = tStr + " " + connector + " " + name + "<='" + si.Value1 + "'";
                                        break;
                                    case "不等于":
                                        tStr = tStr + " " + connector + " " + name + "<>'" + si.Value1 + "'";
                                        break;
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    tStr = tStr;
                }
            }
            return tStr;
        }

猜你喜欢

转载自blog.csdn.net/tink_tl/article/details/81699485