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;
}
}
}