基于泛型的DAL 分页方法(未完)

来源:互联网 发布:网络隐私权的内涵包括 编辑:程序博客网 时间:2024/06/05 18:29

    public delegate void ReadTableCallback<T>(System.Collections.Generic.IEnumerable<T> reader);
    public interface IColumnInfo
    {
        string ColumnName
        {
            get;
        }
        string MappedName
        {
            get;
        }
        bool IsMappKey
        {
            get;
        }
      
    }
    public class ReadTable<TTable>
    {



        public IColumnInfo this[TTable t]
        {
            get;
        }

        public string TableName
        {
            get;
        }

        public  List<System.Data.SqlClient.SqlParameter> CreateParameters()
        {
                return new List<System.Data.SqlClient.SqlParameter>();
        }

        public TabFilterColumn<TTable> Filter
        {
            get
            {
                return new TabFilterColumn<TTable>(this);
            }
        }

        public TabOrderColumn<TTable> Order
        {
            get { return new TabOrderColumn<TTable>(this); }
        }


        public TabSelectColumn<TTable> Select
        {
            get { return new TabSelectColumn<TTable>(this); }
        }

        public void Enum(ReadTableCallback<TTable> cb, TabSelectColumn<TTable>  selectedColumns, TabFilterColumn<TTable>  filterArgs,TabOrderColumn<TTable> orderColumns)
        {
        }

       
        public enum RL
        {
            None,
            And,
            Or
        }

        public class TabOrderColumn<T>
        {
            internal  TabOrderColumn(ReadTable<T> tab)
            {
              
            }
        }

        public class TabSelectColumn<T>
        {
            internal  TabSelectColumn(ReadTable<T> tab)
            {
              
            }
        }

        public class TabFilterColumn<T>
        {

            protected TabFilterColumn<T> LeftNode;
            protected TabFilterColumn<T> RightNode;
          
            protected RL Relation;
           
            protected ReadTable<T> pTable;


            protected System.Data.SqlClient.SqlParameter[]  para;
            private int count = 0;

            private string sqlExpres;
            public string SqlExpress
            {
                get
                {
                    return sqlExpres;
                }
                protected set
                {

                    sqlExpres = value;
                }
            }


            internal  TabFilterColumn(ReadTable<T> tab)
            {
                pTable = tab;
                Relation = RL.None;

            }
           

            public TabFilterColumn<T> Equal<V>(T t, V v)
            {
                TabFilterColumn<T> cx = new ReadTable<T>.TabFilterColumn<T>(pTable);
                cx.sqlExpres =  string.Format("{0}.{1}=@{1}{2}", pTable.TableName, pTable[t].ColumnName,count );
                count++;
                List<System.Data.SqlClient.SqlParameter> lst = pTable.CreateParameters();
                lst.Add(new System.Data.SqlClient.SqlParameter(string.Format("@{0}0" , pTable[t].ColumnName), v));
                cx.para = lst.ToArray();
                return cx;
            }


            public TabFilterColumn<T> UnEqual<V>(T t, V v)
            {
                TabFilterColumn<T> cx = new ReadTable<T>.TabFilterColumn<T>(pTable);
                cx.sqlExpres = string.Format("{0}.{1}=@{1}{2}", pTable.TableName, pTable[t].ColumnName,count );
                count++;
                List<System.Data.SqlClient.SqlParameter> lst = pTable.CreateParameters();
                lst.Add(new System.Data.SqlClient.SqlParameter(string.Format("@{0}0", pTable[t].ColumnName), v));
                cx.para = lst.ToArray();
                return cx;
            }

            public static TabFilterColumn<T> operator &(TabFilterColumn<T> t1, TabFilterColumn<T> t2)
            {
                TabFilterColumn<T> x = new ReadTable<T>.TabFilterColumn<T>(t1.pTable);
                x.LeftNode = t1;
                x.RightNode = t2;
                x.Relation = RL.And;
                return x;
            }

            public static TabFilterColumn<T> operator |(TabFilterColumn<T> t1, TabFilterColumn<T> t2)
            {
                TabFilterColumn<T> x = new ReadTable<T>.TabFilterColumn<T>(t1.pTable);
                x.LeftNode = t1;
                x.RightNode = t2;
                x.Relation = RL.Or;
                return x;
            }
            
        }
    }
原创粉丝点击