首页 新闻 会员 周边

完善自己的数据访问层?

0
悬赏园豆:100 [已解决问题] 解决于 2014-12-26 08:55

最经在完善自己写的数据访问层,感到非常不灵活,如:BLL中获取泛型对象 ,每次添加一个条件的时候会写很多代码,很烦

1 public List<h_genby> GetList(string day, int status)
2         {
3             return data.getList<h_genby>("EntryDate='" + DateTime.Parse(day) + "' and Status='" + status + "'");
4         }
View Code

getList方法是这个:(根据sql条件获取sql数据库满足的对象)

public List<T> getList<T>(string Sql)
        {
            return getList<T>(Sql, false);
        }
        public List<T> getList<T>(string Sql, bool filter)
        {
            string tableName = typeof(T).Name;
            try
            {
                DataTable dt = new DataTable();
                if (Sql.ToLower().Trim().StartsWith("select"))
                {
                    dt = SqlHelper.QueryTable(Sql);
                }
                else
                {
                    dt = SqlHelper.QueryTable(string.Format("select * from {0} where {1}", tableName, Sql));
                }
                if (dt.Rows.Count > 0)
                {
                    List<T> lst = Activator.CreateInstance<List<T>>();
                    foreach (DataRow row in dt.Rows)
                    {
                        T obj = Activator.CreateInstance<T>();

                        foreach (DataColumn col in dt.Columns)
                        {
                            try
                            {

                                obj.GetType().GetProperty(col.ColumnName).SetValue(obj, row[col], null);
                            }
                            catch
                            {
                            }
                        }
                        lst.Add(obj);
                    }
                    return lst;
                }
                else
                {
                    throw new Exception("数据库没有此数据");
                }
            }
            catch (Exception ex)
            {
                return new List<T>();
            }
        }

写了这么多,我就是想问如何实现像这样的格式,目的是为了更加方便写业务逻辑条件

Public List<T> GetList<T>(Day:day,Status:1)

{

}

Day、Status表示T对象中的属性,day、1表示传过来的值赋给Day、Status,可以自定义添加像重载方法那样。。。教教小弟,大牛们。。。

张雨溪的主页 张雨溪 | 初学一级 | 园豆:112
提问于:2014-12-25 11:22
< >
分享
最佳答案
0

研究一下Dapper吧!拼Sql的,性能又快!或者也可以试试mysql+ef。拼Linq,也很便捷,当封装好了之后,就可以借助T4模板生成了!慢慢来。

             public JsonResult GetMylog(int theid = 0, int typeid = 0)
        {
            List<AuditorLog> list = AuditorLog.GetQuery(o => o.TheID == theid && o.TypeID == typeid && o.AuditorID == _userid);
            return base.Json(list);
        }

多潇洒!呼呼!

收获园豆:20
大楚打码人 | 老鸟四级 |园豆:4313 | 2014-12-25 12:23
其他回答(4)
0

你应该学习一下Expression相关的知识了。

收获园豆:20
爱编程的大叔 | 园豆:30839 (高人七级) | 2014-12-25 11:24
0

表达式树

收获园豆:20
刘宏玺 | 园豆:14020 (专家六级) | 2014-12-25 11:29
0

表达式树对你来说太早了。去学Dapper吧

收获园豆:20
吴瑞祥 | 园豆:29449 (高人七级) | 2014-12-25 11:39
0

简单点就直接反射。。

GetList<T>(obj)   obj = new{predicate1 = "",predicate2=""}。。如果要like之类的,那么就需要在逻辑中,处理一下。

逻辑中,用反射来那obj对象,然后组合条件。

可以参考现有的微型ORM:Petapoco,Dapper等~

收获园豆:20
幻天芒 | 园豆:37175 (高人七级) | 2014-12-25 12:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册