日期:2014-05-17  浏览次数:20911 次

C#数据访问层怎么简化查询?如果我有两个都是不同的查询功能,查询的一些代码会冗余,想简化代码。都是最基本的访问数据库ADO.NET
如果我有两个查询功能(都是返回集合):1.查询用户信息。2.查询新闻信息。这样查询的除了sql语句和返回集合的泛型不同,其他都是一样的,本人想简化下代码,将共同的部分提取出来?请问有什么办法,对于查询不同的sql语句,返回不同的泛型集合,怎么去控制这个泛型呢?有一个小小的思路就是通过反射,但是能根据不同的sql语句查询不同的信息,但是返回的泛型集合有不同。
C# ADO.NET

------解决方案--------------------
反射就很好。如果你担心反射性能不行,在.NET 4.0以上版本,可以借助Expression.MemberAccess构造Lambda去赋值,它在IL层面上翻译为直接对属性的操作,比反射快很多。
------解决方案--------------------
从sp兄那学来的:

 public IEnumerable<T> ExecuteQuery<T>(string sql, DbParameter[] ps, Func<DbDataReader, T> proc)
        {
            var str = "Data Source=.;Initial Catalog=TestDB;Integrated Security=True";

            using (DbConnection con = new SqlConnection(str))
            {
                con.Open();
                var cmd = con.CreateCommand();
                cmd.CommandText = sql;
                if (ps != null)
                    cmd.Parameters.AddRange(ps);
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                    yield return proc(reader);
            }
        }