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();
}
}
}
}