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
|
{
|
/// <summary>
|
///
|
/// </summary>
|
/// <typeparam name="T"></typeparam>
|
/// <param name="edm"></param>
|
/// <param name="pageIndex"></param>
|
/// <param name="pagecount"></param>
|
/// <param name="totalNum"></param>
|
/// <param name="parm"></param>
|
/// <param name="t"></param>
|
/// <returns></returns>
|
public static List<T> GetSearchData<T>(Model edm, int pageIndex, int pagecount, out int totalNum, Dictionary<string, object> parm, T t)
|
{
|
try
|
{
|
|
string className = t.GetType().Name;
|
var sqlParamsCount = new List<SqlParameter>();
|
var sqlParamsData = new List<SqlParameter>();
|
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<int>(sqlCount, sqlParamsCount.ToArray()).ToList()[0];
|
var datas = edm.Database.SqlQuery<T>(sqlData, sqlParamsData.ToArray()).ToList();
|
if (datas != null)
|
{
|
|
return datas;
|
}
|
else
|
{
|
return new List<T>();
|
}
|
|
}
|
catch (Exception ex)
|
{
|
totalNum = 0;
|
|
return new List<T>();
|
}
|
}
|
|
}
|
}
|