using IWareDataAccess.EF; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IWareDataAccess.Helper { public static class SearchHelper { /// /// /// /// /// /// /// /// /// /// /// public static List GetSearchData(Model edm, int pageIndex, int pagecount, out int totalNum, Dictionary parm, T t) { try { string className = t.GetType().Name; var sqlParamsCount = new List(); var sqlParamsData = new List(); string sqlCount = "SELECT COUNT(*) FROM {0} WHERE 1=1"; sqlCount = string.Format(sqlCount, className); string sqlData = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY id ) AS ROWNUM from {0} where 1=1"; sqlData = string.Format(sqlData, className); if (parm.Count > 0) { if (!parm.Keys.Contains("?")) { bool bl = true; foreach (var key in parm.Keys) { if (parm[key] != null && !string.IsNullOrEmpty(parm[key] + "")) { object pi = parm[key]; Type ti = pi.GetType(); string iname = ti.Name; if (iname == "String") { sqlParamsCount.Add(new SqlParameter("@S_" + key, "%" + parm[key] + "%")); sqlParamsData.Add(new SqlParameter("@S_" + key, "%" + parm[key] + "%")); sqlCount += string.Format(" AND {0} LIKE {1}", key, "@S_" + key); sqlData += string.Format(" AND {0} LIKE {1}", key, "@S_" + key); } else if (iname == "Int32") { sqlParamsCount.Add(new SqlParameter("@S_" + key, parm[key])); sqlParamsData.Add(new SqlParameter("@S_" + key, parm[key])); sqlCount += string.Format(" AND {0} = {1}", key, "@S_" + key); sqlData += string.Format(" AND {0} = {1}", key, "@S_" + key); } else if (iname == "DateTime") { if (bl) { sqlParamsCount.Add(new SqlParameter("@S_" + key, parm[key])); sqlParamsData.Add(new SqlParameter("@S_" + key, parm[key])); sqlCount += string.Format(" AND {0} >= {1}", key, "@S_" + key); sqlData += string.Format(" AND {0} >= {1}", key, "@S_" + key); bl = false; } else { sqlParamsCount.Add(new SqlParameter("@S_" + key, parm[key])); sqlParamsData.Add(new SqlParameter("@S_" + key, parm[key])); sqlCount += string.Format(" AND {0} <= {1}", key, "@S_" + key); sqlData += string.Format(" AND {0} <= {1}", key, "@S_" + key); } } } } } } pageIndex = pageIndex < 1 ? 1 : pageIndex; pagecount = pagecount < 1 ? 10 : pagecount; sqlParamsData.Add(new SqlParameter("@PI_Start", (pageIndex - 1) * pagecount + 1)); sqlParamsData.Add(new SqlParameter("@PI_End", pageIndex * pagecount)); sqlData += string.Format(") t Where t.ROWNUM between {0} and {1} ", "@PI_Start", "@PI_End"); totalNum = edm.Database.SqlQuery(sqlCount, sqlParamsCount.ToArray()).ToList()[0]; var datas = edm.Database.SqlQuery(sqlData, sqlParamsData.ToArray()).ToList(); if (datas != null) { return datas; } else { return new List(); } } catch (Exception ex) { totalNum = 0; return new List(); } } } }