//最终结果 策略:分次查询,后台过滤,若过滤字段不存在则不过滤
//先查询出数据,转换为list,再使用linq对数据进行过滤
// storedProcedure 存储过程名
// Parameters 存储过程参数
//fileterFun linq表达式,可为null
{
IEnumerable<T> mrlist = new List<T>();
DataSet ds = db1.ExecuteDataSet(storedProcedure, CommandType.StoredProcedure, Parameters.ToArray());//获取数据集
if (ds.Tables.Count < 1)
{
return null;
}
else
{
PropertyInfo[] PInfos = typeof(T).GetProperties();
List<T> mrs = new List<T>();
foreach (DataRow dr in ds.Tables[0].Rows)//转换数据表转换为list
{
T mr = DataRowToEntity<T>(dr,PInfos);
mrs.Add(mr);
}
if (fileterFun==null)//如果过滤函数为null,直接赋值
{
mrlist = mrs;
}
else
{
mrlist = fileterFun(mrs);
}
return mrlist;
}
}
//数据行转换为实体类
public T DataRowToEntity<T>(DataRow dr,PropertyInfo[] PInfos) where T:new()
{
T t = new T();
//PropertyInfo[] PInfos = t.GetType().GetProperties();//属性
int i = 0;
foreach (PropertyInfo p in PInfos)
{//注意:类的属性和DataRow列要按顺序一一对应
switch (p.PropertyType.ToString())
{
case "System.Int64": p.SetValue(t, Convert.ToInt64(dr[i] ?? 0), null); break;
case "System.Int32": p.SetValue(t, Convert.ToInt32(dr[i] ?? 0), null); break;
case "System.Double": p.SetValue(t, Convert.ToDouble(dr[i] ?? 0), null); break;
case "System.Decimal": p.SetValue(t, Convert.ToDecimal(dr[i] ?? 0), null); break;
case "System.DateTime": p.SetValue(t, Convert.ToDateTime(dr[i] ?? new DateTime()), null); break;
default: p.SetValue(t, dr[i].ToString(), null); break;
}
i++;
}
return t;
}
//获取数据集
public DataSet GetDataSet(SqlDbHelper db, string storedProcedure, SqlParameter[] Parameters)
{
DataSet ds = db.ExecuteDataSet(storedProcedure, CommandType.StoredProcedure, Parameters);//获取数据集
return ds;
}
//重载
public IEnumerable<T> GetPayReportList<T>(DataTable dt, Func<List<T>, IEnumerable<T>> fileterFun) where T : new()
{
IEnumerable<T> mrlist = new List<T>();
PropertyInfo[] PInfos = typeof(T).GetProperties();
List<T> mrs = new List<T>();
foreach (DataRow dr in dt.Rows)//转换数据表转换为list
{
T mr = DataRowToEntity<T>(dr, PInfos);
mrs.Add(mr);
}
if (fileterFun == null)//如果过滤函数为null,直接赋值
{
mrlist = mrs;
}
else
{
mrlist = fileterFun(mrs);
}
return mrlist;
}